我需要###用当前行号替换模式.
我设法在AWK和SED的下一行打印.
sed -n "/###/{p;=;}" file打印到下一行,没有p;,它取代整行.
sed -e "s/###/{=;}/g" file过去在我脑海中有意义,因为=;返回匹配模式的行号,但它会返回文本{=;}
我想念的是什么?我知道这是一个愚蠢的问题.我在sed手册中找不到这个问题的答案,现在还不是很清楚.
如果可能的话,请指出我错过了什么,以及让它成功的原因.谢谢
鉴于命令的局限性=,我认为将工作分成两部分(实际上是三部分)更容易。使用 GNU,sed您可以:
$ sed -n '/###/=' test > lineno
Run Code Online (Sandbox Code Playgroud)
然后像
$ sed -e '/###/R lineno' test | sed '/###/{:r;N;s/###\([^\n]*\n\)\([^\n]*\)/\2\1/;tr;:c;s/\n\n/\n/;tc}'
Run Code Online (Sandbox Code Playgroud)
恐怕没有简单的方法,sed因为除了=命令之外,rGNU 扩展R命令不会将文件读入模式空间,而是直接将行附加到输出中,因此文件的内容不能以任何方式修改。因此管道到另一个sed命令。
如果内容test是
fooo
bar ### aa
test
zz ### bar
Run Code Online (Sandbox Code Playgroud)
以上将产生
fooo
bar 2 aa
test
zz 4 bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7772 次 |
| 最近记录: |