19

あるパターンに一致する行を検索するスクリプトを書いています。このスクリプトには sed を使用する必要があります。これは、一致した行を検索して印刷する場合にうまく機能します。

sed -n /PATTERN/p

ただし、一致した行番号を行自体の前に出力したいと思います。sedを使用してそれを行うにはどうすればよいですか?

4

6 に答える 6

21

あなたが使用することができますgrep

grep -n pattern file

=行番号で使用する場合sedは別の行に印刷され、パターンスペースで操作することはできません。ただし、出力をsedの別のインスタンスにパイプして、行番号とそれが適用される行をマージすることができます。

sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
于 2012-05-14T14:09:28.797 に答える
13

=行番号を印刷するために使用されます。

sed -n /PATTERN/{=;p;}
于 2012-05-14T03:58:39.297 に答える
9

sedの場合、次を使用して行番号を取得します

sed -n /PATTERN/= 
于 2014-07-30T08:59:33.207 に答える
3

awk に切り替えます。

BEGIN {
  ln=0
}

$0 ~ m {
  ln+=1
  print ln " " $0
  next
}

{
  print $0
}

...

awk -f script.awk -v m='<regex>' < input.txt
于 2012-05-14T03:44:45.183 に答える
2

Perl の使用:

perl -ne 'print "$.: $_" if /regex/' input.file

$.行番号が含まれています。入力ファイルに以下が含まれている場合:

record foo
bar baz
record qux

このワンライナー:perl -ne 'print "$.: $_" if /record/' input.fileは以下を出力します:

1: record foo
3: record qux

または、パターンに一致した行の総数だけが必要な場合は、次を使用します。

perl -lne '$count++ if /regex/; END { print int $count }' input.file

于 2013-12-13T07:01:59.173 に答える
1

最も簡単な方法は次のとおりです。

awk '{print ln++  ":  "  $0 }' 
于 2016-10-20T16:07:27.400 に答える