2015-11-10 67 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 –

相关问题