查找关键字并删除所在两行

我需要修改当前目录与所有子目录中的rst文件,关键是要找到rst文件中带有下面内容的:

.. role:: line5green
   :class: line5green

类似的内容有很多,比如:

.. role:: text9
   :class: text9

或者:

.. role:: dark
   :class: dark

等等。

共同的内容是前缀部分,即:

.. role:: 
   :class: 

把所有rst文件中带有这两行内容的 删除,需要怎么写find命令?

sed '/^.. role:: \(.*\)/N; s/^.. role:: \(.*\)\n   :class: \1//; T; d'

GNU sed only.

1 个赞

这个命令运行以后,终端没有变化,感觉像是命令在等待。我等了大概7-8分钟,按了ctrl+c。
sed的版本:

$ sed --version
sed (GNU sed) 4.9
由 Debian 打包
Copyright (C) 2022 Free Software Foundation, Inc.
许可证 GPLv3+:GNU 通用公共许可证第 3 版或更新版本<https://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律范围内没有其他保证。

由 Jay Fenlason、Tom Lord、Ken Pizzini、
Paolo Bonzini、Jim Meyering 和 Assaf Gordon 编写。

本 sed 程序构建时含有 SELinux 支持。
此系统已禁用 SELinux。

GNU sed 主页:<https://www.gnu.org/software/sed/>。
使用 GNU 软件的一般性帮助:<https://www.gnu.org/gethelp/>。
请将错误报告发送至:<bug-sed@gnu.org>。

呃,你自己接管道或者文件名呀……

哦,你要修改一堆 .rst 的话,用 zsh 可以这样:sed -i .... **/*.rst

2 个赞

果然可以,搞定!