我想对我的输入文件中除此之外与我的正则表达式匹配的所有行进行编号。例如:
输入文件:
some text 12345
some another text qwerty
my special line
blah foo bar
正则表达式:^我的
输出:
1 some text 12345
2 some another text qwerty
my special line
3 blah foo bar
最佳答案
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
) 当行与表达式不匹配时(在预递增的计数器之前)。
第一个 pattern{action}
对之后的 1
本身就是一个 pattern{action}
对,省略了 action 部分。 1
始终为真,因此始终执行该操作,未指定时的默认操作为{print}
。而没有参数列表的 print
等同于 print $0
,即打印整行。
关于bash - 如何在异常情况下对文件中的行进行编号(bash 或 sed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128478/