我有一个包含这种内容的文件:
bla bla
模式2
bla bla
模式
1
bla
bla 模式1 bla
bla
模式1
我想以粗体删除整行,即包含pattern1最后一次匹配后的第一次出现pattern2。
有人有想法吗?
谢谢 !
这是一个ex单线。(ex是 的前身和脚本形式vi。)
printf '%s\n' '$?pattern2?/pattern1/d' x | ex file.txt
Run Code Online (Sandbox Code Playgroud)
在x保存并退出。将其更改为%p,如果你只想打印改变的文件,但不保存更改(良好的测试)。
$表示文件的最后一行;?pattern2?是一个地址,表示pattern2从当前位置开始向后搜索的第一个结果;/pattern1/是前向搜索地址,d是行删除命令。
使用ex时,你需要向前和向后寻址。
你可以在vi或 Vim 中以交互方式做同样的事情:
vim file.txt
Run Code Online (Sandbox Code Playgroud)
然后,键入
:$?pattern2?/pattern1/d
Run Code Online (Sandbox Code Playgroud)
并按 Enter。
然后保存并按:xEnter退出。