我正在尝试从文件夹中的许多文件中删除多个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 :(得分: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"