3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

【シェル芸本】テキスト処理に使うLinuxコマンドをまとめる。

Posted at

はじめに

私は普段大学でlinuxを使います。ディレクトリ作成やファイル移動など簡単なことだけですが、コマンドを入力して処理が行われるというのが非常に気に入り、もっとCUIで何かがしたいと考え、衝動的にシェル芸の本を3冊買ってしまいました。痛い出費ですが、買ったからには少しでも早く習得したいと考え、アウトプット代わりに問題を解くために使ったコマンドをまとめることにします。

私が買った本のうちの一冊は「1日1問、半年以内に習得 シェル・ワンライナー160本ノック」というもので、さしあたり1章を終わらせてから本記事を執筆しているので、これからまとめるコマンドはおそらくは基本的なコマンドだと思われます。

目次

はじめに
1.cat
2.sed
3.grep
4.awk
5.sort
6.uniq
7.xargs
8.tr
おわりに

1. cat

catコマンドはファイルの中身をそのまま出力してくれるコマンド。

cat hogehoge.txt

このまま実行してやればファイルの中身が出力される。
オプションとして、-b 空白行を飛ばして行番号を表示-n 行番号を表示などがあります。
似たようなコマンドにtacというものがあり、こちらはファイルの中身をすべて逆さまにして出力します。

2. sed

sedコマンドは入力されたテキストを置換とかしてくれます。
結構色々使い方があるみたいです。

sed 's/hoge/fuga/' #最初のhogeのみfugaに置換
sed 's/hoge/fuga/g' #すべてのhogeに対してfugaに置換

というように、置換ができたり,

sed -n '/hoge/p' #hogeにマッチした行のみ出力
sed -n '/hoge/,/fuga/p' #hogeにマッチした行からfugaにマッチした行までを出力

という抽出?もできたりします。
-n 自動出力しない(マッチしたり置換したやつ以外出力しない)
検索には正規表現が使えますが、-E 拡張正規表現を認めるを使うと、拡張正規表現も使えるようです。私は拡張正規表現はほとんど知りませんが、それでもカッコで囲んだ部分を\1,\2,...,\nのように変数として扱える後方参照という機能が開放され、それだけでも結構便利な使い方ができます。

3. grep

grep (文字列) #文字列を検索して、マッチした行を出力する。

もちろん正規表現は使えるし、オプション-E 拡張正規表現を認めるもある。-l ファイル名を大量に入れて実行したとき、マッチしたもののファイル名のみを出力。-n ファイルを入れて実行したとき、マッチした行を出力する。というものもある。
-lについては|パイプラインで入れると(標準入力)としてファイル名が出るので、ファイル名を出したいときはxargsでファイル名を与えて実行してやるといいと思います。
それ以外にも-v マッチしない行を出力。 -o 検索と一致したものを出力する。 -r ディレクトリ以下の位置にあるファイルを全て検索する。など、便利なオプションが多数ある。

4. awk

コマンドライン上の入力行ごとにを引数に渡し、awkというプログラミング言語を活用することができます。読み込んだ引数は一番左の列を一列目として$1(第1フィールド),$2(第2フィールド),...,$n(第nフィールド)というように変数として呼び出しが可能です。なお、$0は行全体を指します。

awk '条件{処理}' #基本はこの形で使う。条件をパターン、処理をアクション、パターンとアクションの組をルールという。

ルールは2つ以上並べることができます。特殊なパターンとしてBEGINパターンENDパターンが存在しています。

BEGIN{処理} #一行目の処理前に処理が実行されます。
END{処理} #最終行の処理を終えた後、処理が実行されます。

なお、自分で適当な名前の変数を宣言することもできます。特に型はないようで、文字列か数字かを自分で判断してくれるみたいです。連想配列や、for文とかif文とかもかけます。
他にもawkの内部で独自の変数(組み込み変数というらしい)が使えるようで、NF Number of Fields、各行の列数というものがある。
オプションとして、`-F(文字) デフォルトで空白が設定されている区切り文字を(文字)に変更する。-F:で区切り文字を:にできます。

5. sort

テキストをソートしてくれます。-k (数字) (数字)列目を基準にソートしてくれる-n 数字としてソート-t (なんか文字) 区切り文字をデフォルトの空白から(なんか文字)に変えてソートするというオプションがあります。

6. uniq

連続行の出力や削除をしてくれます。-c 出現回数を行の前に出力してくれます。というオプションがあります。sort+uniqで文字列カウントに使えるみたいです。

7. xargs

入力から文字列を読み込み、それをコマンドに引数として渡した後に実行させます。

cat hoge.txt | xargs #xargsは何も指定しないとechoコマンドが実行される。
seq 10 | xargs -I@ mkdir #(数字)というディレクトリが作成される。

個人的に相当便利だな?と思いました。-n(数字) 引数が入る上限を決める。(数字)個が上限になる。``-I@ @をプレースホルダとして指定する。
プレースホルダは要はこれから入れる値を予め変数として呼び出せる文字、みたいな認識でいいと思います。

8. tr

tr hoge fuga #hogeをfugaに置換する。
tr -d hoge #hogeを削除する。
tr -s hoge #hogeの繰り返しを一つにまとめる

sedみたいに置換や削除ができるみたいです。-c hoge以外をfugaで置換など、便利な機能がありますが、sedと結構機能が被ってるな、とも思いました。trとsedで違うところがあればぜひコメント欄で教えてください。

おわりに

以上、シェル芸本を解く際に使った、基本的な(と思われる)コマンドをまとめました。何かしら間違いや問題等ありましたら、ぜひ教えてください。

参考文献

上田隆一,山田泰宏,田代勝也,中村壮一,今泉光之,上杉尚史.「1日1問、半年以内に習得 シェル・ワンライナー160本ノック」.技術評論社.2021
沓名亮典.「Linuxコマンドポケットリファレンス」.技術評論社.2015
ITmedia.「Linux基本コマンドTips」.[https://atmarkit.itmedia.co.jp/ait/series/3065/].(参照 2024-01-02)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?