我想将 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/