我试图在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文件中指定的字体会更容易。非常感谢帮助我调试这个。欢呼声。
答案 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" {} \;