2017-02-24 156 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" {} \;