0

我想编辑一个文件。我想搜索一个字符串并删除包含该字符串的行和它之前的 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 可能是“下一行”,但是如果您要打印 (,P) 所有行,为什么这是必要的?

4

1 回答 1

2

您可以使用简单的回显测试传递给“ed”的命令:

 $ echo $'g/PATTERN/-X,.d\n,p'
 g/PATTERN/-X,.d
 ,p

所以实际上\n唯一表示第一个命令的结束,并在你的 shell 中被替换。这ed对您的外壳没有任何意义。

如您所说g/PATTERN/-X,.d,将 -X 行中的所有行删除到与 PATTERN 匹配的行的当前位置

,p显示文件中的所有行

在第二个命令中,这\d只是一个错误。你应该把它读成\n.

于 2015-02-26T15:45:06.370 回答