Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对文件中有异常的行进行编号(bash或sed)_Bash_Sed - Fatal编程技术网

如何对文件中有异常的行进行编号(bash或sed)

如何对文件中有异常的行进行编号(bash或sed),bash,sed,Bash,Sed,我想对输入文件中与我的regexp匹配的所有行进行编号,除了这个。例: 输入文件: 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 awk可以很容易地做到这一点。Awk脚本: !/^my/ { cnt++; pri

我想对输入文件中与我的regexp匹配的所有行进行编号,除了这个。例:

输入文件:

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

awk
可以很容易地做到这一点。Awk脚本:

!/^my/ {
  cnt++;
  printf "%d ", cnt
}
{
  print
}
这意味着:对于所有与表达式不匹配的行,请增加变量
cnt
(从零开始),然后打印该数字,然后打印空格。然后把整行打印出来

演示:

浓缩版,感谢:

当整行(
$0
)与表达式不匹配时(前置递增计数器),可以修改整行(
$0)。

第一个
pattern{action}
对之后的
1
本身就是
pattern{action}
对,动作部分被省略<代码>1
始终为真,因此始终执行操作,未指定任何操作时的默认操作为
{print}
。无参数列表的
print
等同于
print$0
,即打印整行。

或更短的一行:
/^我的/{$0=++cnt”“$0}1
没有考虑修改
$0
,这在本例中效果很好。孤独的
1
是一条有趣的捷径,虽然有点神秘。
 $ awk '!/^my/{cnt++; printf "%d ", cnt} {print}' input 
1 some text 12345
2 some another text qwerty
my special line
3 blah foo bar
$ awk '!/^my/{$0=++cnt" "$0} 1' input