あるパターンに一致する行を検索するスクリプトを書いています。このスクリプトには sed を使用する必要があります。これは、一致した行を検索して印刷する場合にうまく機能します。
sed -n /PATTERN/p
ただし、一致した行番号を行自体の前に出力したいと思います。sedを使用してそれを行うにはどうすればよいですか?
あなたが使用することができますgrep
:
grep -n pattern file
=
行番号で使用する場合sed
は別の行に印刷され、パターンスペースで操作することはできません。ただし、出力をsedの別のインスタンスにパイプして、行番号とそれが適用される行をマージすることができます。
sed -n '/pattern/{=;p}' file | sed '{N;s/\n/ /}'
=
行番号を印刷するために使用されます。
sed -n /PATTERN/{=;p;}
sedの場合、次を使用して行番号を取得します
sed -n /PATTERN/=
awk に切り替えます。
BEGIN {
ln=0
}
$0 ~ m {
ln+=1
print ln " " $0
next
}
{
print $0
}
...
awk -f script.awk -v m='<regex>' < input.txt
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
最も簡単な方法は次のとおりです。
awk '{print ln++ ": " $0 }'