鉴于此文件
$ cat foo.txt AAA 111 BBB 222 CCC 333
我想用BBB
替换999
之后的第一行。我想出了这个命令
awk '/BBB/ {f=1; print; next} f {$1=999; f=0} 1' foo.txt
但我对使用awk或sed的任何较短命令感到好奇。
答案 0 :(得分:4)
这有点短:
awk 'f{$0="999";f=0}/BBB/{f=1}1' file
f {$0="999";f=0}
如果f
为真,请将行设置为999
,将f
设置为0
如果模式匹配将/BBB/ {f=1}
设置为f
,则1
1
打印所有行,因为1
始终为真。
答案 1 :(得分:3)
也可以使用sed,它更短
sed '/BBB/{n;s/.*/999/}'
答案 2 :(得分:3)
$ awk '{print (f?999:$0); f=0} /BBB/{f=1}' file
AAA
111
BBB
999
CCC
333
答案 3 :(得分:2)
awk '/BBB/{print;getline;$0="999"}1' your_file
答案 4 :(得分:2)
这可能适合你(GNU sed)
sed '/BBB/!b;n;c999' file
如果某行包含BBB
,请打印该行,然后将以下行更改为999
。
答案 5 :(得分:0)
sed 's/\(BBB\)/\1\
999/'
适用于mac