ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

grepなどのUNIXのコマンドを学びました

UNIXのサーバー上でPHPのプログラムを動作にさせています。
保存されているソースコードから、「$_SESSION['param1']」と「$_SESSION['param_1']」のどちらの記述が多いのか、調べなければならなくなりました。

grepコマンドの存在は知っていたので、

$ grep "$_SESSION['param1']" *.php

を実行すると、思っていた結果と全く異なる結果になりました。

grepコマンドについて学ぶ

なぜ想定と全く異なるんだろうとコマンドの解説が書かれているサイトの記事を読むと、grepコマンドは正規表現で検索しているということに気がつきました。
UNIXの部屋 コマンド検索:grep (*BSD/Linux)

fgrepコマンドについて学ぶ

エスケープするしかないのかと、エスケープの文字は「\」なんだよねと検索していると、こちらの記事で正規表現で検索しない「fgrep」を知りました。
@IT:正規表現で使用するメタ文字を検索するには

fgrepを利用して

$ fgrep "$_SESSION['param1']" *.php

として、思っていたとおりのファイルが検索されました。

検索されるのはいいのですが、「$_SESSION['param1']」と「$_SESSION['param_1']」のどちらの記述が多いか調べるには、このままではソースコードが表示されて見づらいので、

$ fgrep -ls "$_SESSION['param1']"

としたらファイル名のみ表示されるようになりました。

f:id:AJYA:20160516054903j:plain
photo credit: New FreeBSD boot menu via photopin (license)

サブディレクトリも対象にする方法を学ぶ

カレントディレクトリ内は検索されましたが、サブディレクトリ内は検索されないので、どうすればいいかと調べたら、こちらの記事で方法が紹介されていました。
Linux | サブディレクトリも含めて特定文字の含まれるファイルを探す(find xargs grep) | 仕組屋の手帳

紹介されていた方法を参考にして、

$ find . -type f -name "*.php" | xargs fgrep -ls "$_SESSION['param1']"

としたらサブディレクトリ内も検索されました。


最後は思いもしなかったコマンド(find)と知らないコマンド(xargs)を使用しましたが、目的どおりの動作をさせて、結果を得られました。