2017-02-24 196 views
0

我试图在Mac Sierra的终端中使用find和sed组合,但我无法完全理解语法。这是迄今为止我所能做到的最好的:在Mac OS X命令行终端下使用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

你必须用单引号括起来的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" {} \;