web-dev-qa-db-ja.com

Bashスクリプトを使用してファイル内の文字列の行番号を検索する

文字列が発生する行番号を見つけるためにbashスクリプトを使用するにはどうすればよいですか?

たとえば、ファイルが次のように見える場合、

Hello I am Isaiah
This is a line of text.
This is another line of text.

スクリプトを実行して、文字列「line」を検索しました。これは最初の出現であるため、数値2を出力します。

26

あなたの例が文字列の最初の出現の行番号のみを印刷することを考えると、おそらくあなたは探しています:

awk '/line/{ print NR; exit }' input-file

実際にすべてのオカレンスが必要な場合(たとえば、例の目的の出力が実際に「2\n3\n」の場合)、exitを省略します。

42
William Pursell

私は、OPに関するSiddharthaのコメントが好きです。答えが私を逃れるので、なぜ彼がそれを投稿しなかったのか。

私は通常、探しているものを示す最初の行の行番号が欲しいだけです。

lineNum="$(grep -n "needle" haystack.txt | head -n 1 | cut -d: -f1)"

説明: grepの後、最初の行だけを取得(num:line)、cutコロンd elimiterで、最初のf ieldを取得

5
hanzo2001