我想为输入文件中的所有行编号,除此之外,与我的正则表达式相匹配。例如:
输入文件:
some text 12345
some another text qwerty
my special line
blah foo bar
Regexp:^ my
输出:
1 some text 12345
2 some another text qwerty
my special line
3 blah foo bar
答案 0 :(得分:6)
awk
可以很容易地做到这一点。 Awk脚本:
!/^my/ {
cnt++;
printf "%d ", cnt
}
{
print
}
这意味着:对于与表达式不匹配的所有行,递增变量cnt
(从零开始)并打印该数字后跟空格。然后打印整行。
演示:
$ awk '!/^my/{cnt++; printf "%d ", cnt} {print}' input
1 some text 12345
2 some another text qwerty
my special line
3 blah foo bar
归结为Thor的精简版:
$ awk '!/^my/{$0=++cnt" "$0} 1' input
当行与表达式不匹配时(修改预先递增的计数器),修改整行($0
)。
第一个1
对之后的pattern{action}
本身是pattern{action}
对,省略了操作部分。 1
始终为true,因此始终执行操作,并且未指定时的默认操作为{print}
。没有参数列表的print
等同于print $0
,即打印整行。