1

ディレクトリに多数のログ ファイルがあります。すべてのログ ファイルで文字列を検索し、ファイルの名前と文字列が見つかった行番号をエコーするスクリプトを作成しようとしています。

-lオプションはファイルの名前のみを返し、行番号については何も返さないため、おそらく2つのgrepを使用する必要があると思います-一方の出力を他方にパイプします。どうすればこれをうまく達成できるかについての洞察をいただければ幸いです。

どうもありがとう、

アレックス

4

3 に答える 3

5
$ grep -Hn root /etc/passwd
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash

組み合わせて、あなたが期待することを-H行います。-n

文字列なしで必要な情報をエコーする場合:

$ grep -Hn root /etc/passwd | cut -d: -f1,2
/etc/passwd:1

またはで:

$ awk -F: '/root/{print "file=" ARGV[1] "\nline=" NR}' /etc/passwd
file=/etc/passwd
line=1

shell変数を作成する場合:

$ awk -F: '/root/{print "file=" ARGV[1] "\nline=" NR}' /etc/passwd | bash
$ echo $line
1
$ echo $file
/etc/passwd
于 2012-11-19T21:59:59.233 に答える
2

を使用し-Hます。を持たない grep を使用している場合は-H、2 つのファイル名を指定します。例えば:

grep -n pattern file /dev/null
于 2012-11-19T21:58:51.627 に答える
0

私のバージョンの grep は、一致する行からテキストを返し続けました。これは、後であるかどうかわかりませんでした...出力をawkコマンドにパイプして、ファイル名と行番号のみを出力することもできます

grep -Hn "text" . | awk -F: '{print $1 ":" $2}'

于 2012-11-19T22:12:08.233 に答える