linux - 如何在 ed 中使用带有模式的相对行号

标签 linux command-line text-editor ed

在尝试使用 ed 删除特定模式周围的线条时,我一直在逼自己发疯 TS.

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

我尝试了几种变体

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'

这些都不起作用。它是怎么做到的?

最佳答案

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

/pattern/-;+2d

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

(注意 /pattern/-/pattern/-1 的简写)

关于linux - 如何在 ed 中使用带有模式的相对行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424831/

相关文章:

c - 为什么此代码包含 case 0 和 default?

c - 如何抑制 C 中的 openssl 错误输出?

linux - 在成功 ping 时打开 firefox 的 Bash 脚本

linux - 用于进入多个目录并执行命令的命令行 bash

php - 如何在 PHP 交互模式下执行

css - 使 CSS 注释充当 CSS 文件中的链接

xcode - Xcode 中的基本 Control-TAB (MRU) 行为在哪里?

linux - 使用点空格与点斜线执行文件

qt - 如何将命令行参数传递给 QT 中已经打开的程序?

text-editor - 我可以设置ABAP编辑器的背景颜色吗?