我想编辑一个文件。我想搜索一个字符串并删除包含字符串的行和前面的19行。
我在另一个网站上发现了一个类似的问题(主题现已关闭),给出的答案是使用以下ed命令(第一个命令是在PATTERN之前删除X行 第二个命令删除PATTERN后的X行;
ed -s file <<< $'g/PATTERN/-X,.d\n,p'
ed -s file <<< $'g/PATTERN/.,+Xd\d,p'
我已经尝试了第一个命令并且它可以正常工作,但是我分别不理解第一个和第二个命令中\ n和\ d的含义。我认为\ n可能是&#34;下一行&#34;,但是如果打算打印(,P)所有行,为什么这是必要的呢?
答案 0 :(得分:2)
您可以测试传递给&#34; ed&#34;用一个简单的回声:
$ echo $'g/PATTERN/-X,.d\n,p'
g/PATTERN/-X,.d
,p
所以实际上\n
只表示第一个命令的结束,并在shell中被替换。这对ed
没有任何意义,但对你的shell来说没有意义。
正如你所说g/PATTERN/-X,.d
删除了从-X行到PATTERN匹配的行的当前位置的所有行
,p
显示文件中的所有行
在第二个命令中,\d
只是一个错误。你应该把它读作\n
。