Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

便利なシェルコマンド たち

More than 1 year has passed since last update.

概要

 最近シェルコマンドに触れたので、その際に使った便利なシェルコマンドを紹介したいと思います。芸まで昇華させるには茨の道ですが、時々触って行こうと思います。

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 | 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;}'

このように用いることで消し去ってくれます。愉快愉快。

まとめ

 今回挙げたコマンド以外にも、sedcutなど調べたコマンドはございましたが、awkの方が最強なんじゃないかなと今の知識レベルでは思ったので割愛させていただきます。また、シェル芸と正規表現は表裏一体なのかなと思うので機会があれば正規表現の記事も書こうと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away