2015-02-23 63 views
0

我有有一個像冗餘鏈路子文件夾中的幾個HTML文件:如何從linux中的多個文件中刪除特定的行?

<link rel="stylesheet" href="../demos.css"> 

我試圖在Linux中使用以下命令來刪除所有的HTML文件,該行:

find -name '*.html' -exec sed --in-place=.bak 'demos.css' "{}" ; 

但這給了我以下錯誤:

find: missing argument to `-exec' 

是的,當然,我已經檢查了有關此b的Stackoverflow上的所有解決方案其中大部分都是關於單個文件,其餘都沒有幫助。我在做什麼錯誤的代碼?

+0

檢查這個 http://stackoverflow.com/questions/11245144/replace-whole-line-containing-a-string-using-sed – candymanuu 2015-02-23 14:59:03

回答

2

find缺少啓動路徑,sed缺少d命令,你需要躲避分號在find命令:

find . -name '*.html' -exec sed -i.bak '/demos\.css/d' '{}' \; 

或者更好:

find . -name '*.html' -exec sed -i.bak '/demos\.css/d' '{}' + 
+0

我越來越喜歡這個'sed的一個錯誤:-e表達式# 1,char 2:命令後的額外字符 - 在這兩種情況下。 – HackCode 2015-02-23 14:31:06

+0

在第一種情況下,我得到了這個錯誤幾次,而在第二種情況下,我得到它只有一次。 – HackCode 2015-02-23 14:31:42

+0

仍然是一樣的錯誤。我不明白爲什麼,這似乎沒問題! – HackCode 2015-02-23 14:34:38

0

試試這個請:

for i in `find /www/htmls/ -name "*.html" 2>/dev/null` 
do 
    sed -i '/demos\.css/d' "$i" 
done 
+0

不會給出任何錯誤,但不會更改html文件。 – HackCode 2015-02-23 14:37:13

+0

對不起,逃脫了「。」 – poll0rz 2015-02-24 14:36:13

0
for i in `find /www/htmls/ -name "*.html" 2>/dev/null` 
do 
    sed -i 's/^demos.css.*//' "$i" 
done 
+4

雖然此代碼塊可能會回答問題,但您應始終提供一些解釋。 – 2015-02-23 16:01:46

相關問題