1. tosagatuo

    Posted

    tosagatuo
Changes in title
+便利なシェルコマンド たち
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,54 @@
+# 概要
+ 最近シェルコマンドに触れたので、その際に使った便利なシェルコマンドを紹介したいと思います。芸まで昇華させるには茨の道ですが、時々触って行こうと思います。
+
+## find
+ ファイルとかを見つけたい時に便利です。*このディレクトリには絶対に入ってないから対象外にしたい* と思ったことはありませんか?そんな時には以下のコマンド
+
+```
+find ./hogehoge -type d -name maguro -prune -o -type f -print
+```
+
+これでhogehogeの配下にある、**maguro**フォルダ以外を対象として検索してくれます。めでたしめでたし。
+
+## xargs
+ xargsと調べると、 **コマンドラインを作成して実行する** と出てきます。自分はコマンドを組み合わせる時に使うパイプ **|** と一緒だと勘違いしていましたが、実際に使ってみると全然違いました。以下のようなコマンドだとわかりやすいです。
+
+A
+
+```
+find . -type f | xargs grep "printf"
+```
+
+B
+
+```
+find . -type f | xargs grep "printf"
+```
+
+ Aはファイルの中身に **printf** が含まれるファイルのpathと該当行を返してくれますが、Bはファイル**名**にprintfが含まれるものを返してくれます。
+
+## awk
+ awkコマンドはすごく便利です。テキストの削除も切り出しもこのコマンド一つでできてしまいます。正規表現が自由自在に使える方は愛用してそうだと勝手に思いました。
+ awkの使い方の一例として、 xargsのAの実行で以下のような結果になったとします。
+Aの実行結果
+
+```
+./hogehoge/aaa.c: printf('Hello, World!');
+```
+
+pathは邪魔でコードのところだけ欲しいという方は
+
+```
+find . -type f | xargs grep "printf" | awk '{$1 = ""; print}'
+```
+
+とすることで取り除いてくれます。便利便利。
+他にも、 特定の文字以降を消し去りたいと思った方は、
+
+```
+awk '{sub("\/.*", "");print $0;}'
+```
+このように用いることで消し去ってくれます。愉快愉快。
+
+## まとめ
+ 今回挙げたコマンド以外にも、**sed**や**cut**など調べたコマンドはございましたが、**awk**の方が最強なんじゃないかなと今の知識レベルでは思ったので割愛させていただきます。また、シェル芸と正規表現は表裏一体なのかなと思うので機会があれば正規表現の記事も書こうと思います。