regex - sed mass 通过终端替换 CSS 样式

标签 regex linux sed terminal find

我想将 font-family: ([A-Za-z ,"]+){1}; 的所有实例替换为 font-family: Verdana使用 sed。过去,以下命令用于简单搜索和替换:

find ./ -type f -exec sed -i 's/needle/replace/' {} \;

但是,我尝试了以下正则表达式但没有成功:

find ./ -type f -exec sed -i 's/(font\-family:){1}([\"A-Za-z, ]+){1}(;){1}/font\-family: Verdana;/' {} \;

我使用的是 Red Hat Enterprise Linux Server 5.6 版。此外,第一个命令似乎只适用于任何给定文件中的第一个实例,这意味着我必须重新运行该命令,直到每个实例都被替换......我可以改进命令以适用于所有文件的所有实例吗?

最佳答案

首先,解释一下为什么您的方法不起作用。您需要转义所有括号、方括号和 +,因此以下内容应该有效:

sed -i 's/\(font\-family:\)\{1\}\(["A-Za-z, ]\+\)\{1\}\(;\)\{1\}/font-family: Verdana;/'

幸运的是,您可以添加 -r 开关来防止所有转义的需要,但您也可以大大简化当前的表达式。您不需要将每个部分都放入一个捕获组中,并且将 {1} 添加到每个组是多余的(这基本上是默认设置)。所以你可以把它减少到:

sed -ri 's/font-family:["A-Za-z, ]+;/font-family: Verdana;/g'

请注意为全局替换添加的 g 选项,因为您希望在每次出现时都使用它。

一起:

find ./ -type f -exec sed -ri 's/font-family:["A-Za-z, ]+;/font-family: Verdana;/g' {} \;

关于regex - sed mass 通过终端替换 CSS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540463/

相关文章:

regex - 创建条件 bash 脚本代码

linux - 寻找在 Linux 中编辑大文件的快速方法

regex - 附加到文件,sed 未终止地址正则表达式

ruby-on-rails - Ruby Regex - 需要替换正则表达式匹配中出现的每个字符

ruby-on-rails - 如何组合 Ruby 正则表达式条件

python - 正则表达式用于嵌入其余匹配中的多字符串?

replace - sed搜索并替换xml文件中的路径

regex - 如何列出 Google 表格上最常见的 3 个单词字符串

linux - 压缩命令不起作用

ubuntu - 执行 script.sed 在 ubuntu 中出现错误?