2

我想为我的输入文件中的所有行编号,除了这个,匹配我的正则表达式。前任:

输入文件:

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
4

1 回答 1

7

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,即打印整行。

于 2012-08-26T07:56:12.213 回答