サブフォルダで単語の発生を検索

サブフォルダで単語の発生を検索

こんにちは、私はサブフォルダ内のすべての単語を見つけようとしています。これは簡単なようですが、各項目のパスとファイル名、「-> Line:」、およびその項目を含む行番号を表示したいと思います。

たとえば、 example/example/file.png -> Line: 25

これを試しましたが、grep -rnl 'word' subfolder/ | sed 's/$/ -> Line : /'末尾に行を印刷する方法が見つかりませんでした。以下は、このコマンドを使用して取得した結果の例です。 ( example/example/file.png -> Line: )

助けてくれてありがとう。

ベストアンサー1

存在するgrep -rnl 'word' subfolder/-n そして紛争-l。ファイル名(-l)のみを印刷するか、すべての一致を行番号()で印刷するかを決定する必要があります-n

したがって、後者を意味すると仮定すると、grep -rn pattern folder/次のように印刷されます。

folder/file:4:line with pattern
folder/file:with:colon:12:other pattern line
folder/subfolder:with:colon/file
with
newline:12:pattern again

明らかに行番号を抽出する方法はありません。

:これは、ファイルパスに改行文字が含まれているか含まれていないことを保証できる場合にのみ実行できます。たぶん、次のようなものがあるかもしれません:

grep -rn pattern folder/ |
  LC_ALL=C sed 's/^\([^:]*\):\([^:]*\)\(.*\)/\1\3 -> Line: \2/'

これを確実に行うには、ファイルパスに含まれる文字または非文字に関係なく、次のことを行う必要があります。

find folder/ -type f -exec awk '
  /pattern/ {
    print FILENAME":"$0" -> Line: "FNR
  }' {} +

これにより、-r非標準および非移植性オプションが不要になりますgrep


1ディレクトリ階層が深すぎてファイルパスの長さを超えると、これは信頼できない可能性がありますPATH_MAX

おすすめ記事