我正在写,搜索匹配某种模式的行脚本。 我必须为这个脚本中使用SED。 这工作得很好,用于搜索和打印匹配行:
sed -n /PATTERN/p
不过,我也想打印行本身的前面匹配的行数。 我怎样才能做到这一点使用的sed?
我正在写,搜索匹配某种模式的行脚本。 我必须为这个脚本中使用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 }'