grepの使用中に行番号を取得する


360

私はgrepを再帰的に使用してファイルの文字列を検索し、一致したすべてのファイルとその文字列を含む行が端末に出力されます。しかし、それらの行の行番号を取得することも可能ですか?

例:現在取得しているのはですが/var/www/file.php: $options = "this.target"、取得しようとしているのは/var/www/file.php: 1142 $options = "this.target";1142その文字列を含む行番号です。

私が再帰的にgrepするために使用している構文は sudo grep -r 'pattern' '/var/www/file.php'

もう1つの質問は、パターンと等しくない場合の結果を取得する方法です。すべてのファイルが好きですが、特定の文字列を持つファイルは好きではありませんか?


-vフラグは一致しない行を表示します(grep -v myText MyFile.txt)
bcarroll

回答:


546
grep -n SEARCHTERM file1 file2 ...

別の簡単な質問がありました。パターンと等しくない場合の結果をどのように得るかです。すべてのファイルが好きですが、特定の文字列を持つファイルは好きではありませんか?
sai

5
コマンドラインスイッチ-vになります。「grep --help」を実行すると、すべてのオプションが表示されます
Miro A.

56
-r複数のファイルを指定する必要はありません。-rディレクトリを指定する場合にのみ必要です。
Sparhawk、2015年

@JeanPaul--nrと-n -rの両方で同じ結果が表示されます。どのバージョンのgrepを使用していますか?$ grep -n -r name * | wc -l 1984 $ grep -nr name * | wc -l 1984 $ grep -V grep(BSD grep)2.5.1-FreeBSD
Miro A.

コードは答えるだけで、説明はありません。:S
フロリアンカステラン

148

行番号は次のように印刷されgrep -nます:

grep -n pattern file.txt

(一致する行なしで)行番号のみを取得するには、次を使用できますcut

grep -n pattern file.txt | cut -d : -f 1

パターンを含まない行は次のように印刷されgrep -vます:

grep -v pattern file.txt

3
そして最後に一致する行番号:(grep -n pattern file.txt | cut -d : -f 1 | tail -1これを変数に保存して、たとえばそれをテールファイルに使用できます)
Nux

:そして、あなたのようなものを使用することができ、各文字列の先頭で数/コロンを削除するgrep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

行番号のみが必要な場合は、次のようにします。

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

例:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'また、作品&あなたは必要としない-rgrep(唯一のディレクトリを再帰的に検索することができます)ファイルを使用する場合
スチュアートCardallを

7
grep -A20 -B20 pattern file.txt

パターンを検索し、パターンの前後に20行を表示


11
これは要求されたものではありません。
Jonathon Reinhart、2015

3
また、-C20それが望まれたものである場合はより短いバージョンです
Marty Neal

0

grep -nr "search string"ディレクトリ

これにより、行番号が付いた行が得られます。


0

結果を行番号で表示するには、これを試すことができます

grep -nr "word to search for" /path/to/file/file 

結果は次のようになります。

linenumber: other data "word to search for" other data
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.