ディレクトリから文字列を検索する - ファイル名なしで出力を取得する

ディレクトリから文字列を検索する - ファイル名なしで出力を取得する

パターンに一致する行を表示するために、次のコマンドを実行しています。

./files/ -name "*.txt" -print0 xargs -0 grep "5|20150507" 検索

出力は次のとおりです

./files/N1.942_0000.txt:78787878|13|5|20150507221152 ./files/N1.942_0000.txt:78787878|13|5|20150507221 22121 2 |13| 5 | 20150507222004./files/N1.810_0000.txt:8892716618|13|5|20150507215150./files/N1.442_0001.txt:8648648542 1 .442_0001.txt:8648648648 | 13 | 5 |20150507221638 ./files/N1.442_0001.txt:7406079160|13|5|20150507221941

しかし、以下のようにファイル名なしで出力したいと思います。

86486 48648|13|5|20150507221636
8648648648 |13|5|
20150507221638 7406079160 | 20150507221941



答え1

grepコマンドには-rオプションがあります

ディレクトリ内のテキストを再帰的に検索します。

以下の例:

grep -r "5|20150507" ./ | awk -F ':' {'print $2'}

答え2

"-h"オプションと一緒にgrepを使用してください。

 -h, --no-filename
             Suppress  the  prefixing  of file names on output.  This is    
  the default when there is only one file (or only standard input) to
          search.

./files/ -name "*.txt" -print0 | xargs -0 grep -h "5|20150507" 検索

答え3

find ./files/ -name "*.txt" -print0 | xargs -0 grep "5|20150507" | awk 'BEGIN{FS=":"} {print $2}'

特殊文字である可能性があるため、区切り文字「FS =」を使用する必要があるかもしれません。

関連情報