在Mac OS X命令行终端下使用sed

时间:2017-02-24 19:11:36

标签: html5 macos css3 sed find

我试图在Mac Sierra的终端中使用find和sed,但我无法正确理解语法。这是迄今为止我能做到的最好的事情:

MacBook-Pro:~ aschaub$ find . -name "*.html" -exec sed -i '' s/"'Lucinda Grande', 'Lucida Sans Unicode', 'Lucida Sans', 'DejaVu Sans'"/\"'Arial', 'Helvetica'" /g \;

它不会失败,但它也不起作用。我在正确的目录中,但是当我执行命令时,我只是">"从sed提示实际更新我的大量HTML文件。我知道我真的应该有一个带有指定字体的.css文件,但我继承了一些这样的代码,目前,使用find和sed来重置几乎每个HTML文件中指定的字体会更容易。非常感谢帮助我调试这个。欢呼声。

1 个答案:

答案 0 :(得分:0)

您必须用单引号括起sed命令,在字符串中转义'以替换/替换字符串,并使用{}来引用find命令找到的文件:

find . -name "*.html" -exec sed -i '' 's/"'\''Lucinda Grande'\'', '\''Lucida Sans Unicode'\'', '\''Lucida Sans'\'', '\''DejaVu Sans'\''"/"'Arial', 'Helvetica'" /g' {} \;

请注意,此命令会将整个字符串"'Lucinda Grande', 'Lucida Sans Unicode', 'Lucida Sans', 'DejaVu Sans'"替换为"'Arial', 'Helvetica'",而不是每个列出的字体。

如果你想用'Arial', 'Helvetica'替换每个字体,你可以试试这个(用"封闭sed命令时,你不需要转义所有'):

find . -name "*.html" -exec sed -i '' "s/'Lucinda Grande'/'Arial, 'Helvetica'/g;s/'Lucida Sans\( Unicode\)*'/'Arial', 'Helvetica'/g;s/'DejaVu Sans'/'Arial', 'Helvetica'/g" {} \;

或者你有GNU sed:

find . -name "file" -exec sed "s/\('Lucinda Grande'\|'Lucida Sans\( Unicode\)*'\|'DejaVu Sans'\)/'Arial', 'Helvetica'/g" {} \;