对目录中的所有文件运行命令

时间:2015-11-10 15:19:51

标签: xml shell unix sed information-retrieval

我正在尝试从文件夹中的许多文件中删除多个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' {} \;

1 个答案:

答案 0 :(得分:21)

如果您的sed命令适用于给定文件,并且您希望对文件rcv1中指示的所有文件执行相同操作,则只需循环访问文件内容,如{ {3}}:

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"