2017-10-26 4 views
0

私はフォルダ内のファイルに一致するものを見つけるためにはgrepを使用しています:grepの出力をfileAからフォーマットする:match1 fileA:match2からfileA:match1 match2?

grep -inrw "Bob" 'Folder' 

をし、私が得た:

Folder/content/fileA.txt:12: Bob was a good person 
Folder/content/fileA.txt:18: Bob is now even better 

私は私だけありますがあれば、-lパラメータを使用してファイル名を一覧表示することができます知っていますファイル名のみがファイル内のすべての一致を一度表示されていること、の方法で出力をフォーマットするための方法、のようなもの:

Folder/content/fileA.txt: 
12: Bob was a good person 
18: Bob is now even better 

ありがとう!

答えて

0

awkを使用して出力をフォーマットできます。

grep -inrw Bob * |awk -F: '!a[$1]++ {print $1 FS} sub($1 FS, ""){print $0}' 

最初の条件は、最初の列が最初に満たされた場合を意味します。その場合は印刷してください。そして、最後の列(ファイル名)とFS :が削除され、残りの内容が新しい行に印刷されます。このカバーケースでは、の一致した行に文字:が存在します。

> cat file 
Bob line 
Bob: Hi there 

出力

file: 
1:Bob line 
2:Bob: Hi there 

もう一つの方法は、ファイル名とあなたのパラメータを持つgrep出力をgrep -lを実行してから印刷することです。

for f in `grep -l Bob *`; do echo $f':'; grep -inrw Bob $f; done 
+1

おかげで、しかし、マッチライン自体が有している場合がある「:」その中に、結果として、それだけ 'の前に第一成分を出力し、awk''のフィールドセパレータとしても使用されているが: '、何か回避策はありますか? – hzxu

+1

はい、あなたは正しいです!最後のフィールドに ':'という文字が存在する可能性があるので、私は今答えを更新します。 – thanasisp

関連する問題