2015-11-10 98 views
-10

我試圖從文件夾中的多個文件中刪除多個XML標記。我試過sed,但它一次只能在一個文件上運行。對目錄中的所有文件運行命令

這是我用於從單個文件中刪除的sed代碼。包含多個文件的文件夾被稱爲rcv1

sed -e 's/<[^>]*>//g' sk.xml 

a.xml 
b.xml 
c.xml 
d.xml 

我試圖使用的代碼是:

for file in *.xml do sed -e 's/v[^]*>//g' "$file" 

編輯:前面加上find ./ -type f -exec組合曾與fedorqui的回答是:

find ./ -type f -exec sed -i 's/<[^>]*>//g' {} \; 
+0

伴侶IM tryna刪除多個XML文件,而不是一個,我已經得到了很多的文件夾中。我只知道在linux下執行它 –

+0

你的目標是刪除*文件*,還是試圖在文件中做某種處理? – Makoto

+4

對未來讀者的注意:奇怪投票模式的原因是由於對這個問題的元討論:http://meta.stackoverflow.com/questions/309896/they-ask-i-answer-they-delete-我該做什麼和應該做什麼?cb = 1 –

回答

20

如果您sed命令工作了給定文件,並且您希望對文件rcv1中指示的所有文件執行相同操作,只需循環文件內容即可:

while IFS= read -r file 
do 
    sed -e 's/<[^>]*>//g' "$file" 
done < "rcv1" 

這可能是因爲你想這樣做的所有文件在給定的目錄,而不是從文件中讀取它們。在這種情況下,遍歷當前目錄下的文件使用for循環:

for file in * 
do 
    sed -e 's/<[^>]*>//g' "$file" 
done 

另外,如果你想這些文件改變,你可能需要使用-i使發生在-發生的變化。也就是說,文件本身會被新版本修改。爲了安全起見,請撥打sed -i.bak,以便創建備份文件。

一起:

sed -i.bak -e 's/<[^>]*>//g' "$file" 
+3

偉大的@fedorqui – klashxx

+0

@ThomasAyoub謝謝:)好像是昨天才得到我的第一個+1! – fedorqui

+1

@fedorqui肯定,*某處*,昨天意味着3年半前:p –

相關問題