1

在尝试使用ed删除特定模式周围的线条时,我一直在努力。

我想做的是匹配一个模式,然后删除它周围的行。

我尝试了几种变化

ed test.txt <<<< $'/pattern/-1,+1d\nwq'
ed test.txt <<<< $'(/pattern/-1,+1)d\nwq'
ed test.txt <<<< $'/pattern/-,+1d\nwq'
ed test.txt <<<< $'(/pattern/-,+1)d\nwq'
ed test.txt <<<< $'/pattern/-,+d\nwq'
ed test.txt <<<< $'(/pattern/-,+)d\nwq'

这些都没有奏效。它是如何完成的?

4

2 回答 2

2

在处理第二个地址之前,使用分号 ,;将设置当前行 , 。.这使得第二个地址相对于第一个地址,这几乎是您想要的:

/pattern/-;+2d

因为第二个地址是相对于第一个,而不是相对于pattern,所以我们必须使用 +2 来寻址 pattern 之前和之后的行。

(注意这/pattern/-是 的简写/pattern/-1

于 2018-05-08T12:49:17.540 回答
1

经过多次反复试验,我想通了,尽管我似乎找不到任何可以告诉我这一点的文档。似乎每行引用都必须针对单独的模式匹配引用,因此诀窍是两次给出模式。

 ed test.txt <<<< $'/pattern/-,/pattern/+d\nwq'
于 2011-09-15T01:13:56.587 回答