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

Mr *_*erd -9 xml unix shell information-retrieval sed

我正在尝试从文件夹中的许多文件中删除多个XML标记.我试过sed,但它一次只能在一个文件上运行.

这是我用于从单个文件中删除的sed代码.调用包含多个文件的文件夹rcv1.

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

a.xml  
b.xml  
c.xml   
d.xml
Run Code Online (Sandbox Code Playgroud)

我试图使用的代码是:

for file in *.xml do sed -e 's/v[^]*>//g' "$file"
Run Code Online (Sandbox Code Playgroud)

编辑:预先find ./ -type f -exec与fedorqui的答案结合使用:

find ./ -type f -exec sed -i 's/<[^>]*>//g' {} \;
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 21

如果您的sed命令适用于给定文件,并且您希望对文件中指示的所有文件执行相同操作rcv1,则只需循环浏览文件内容,如" 如何读取文件(数据流,变量)"行中所示 -按行(和/或逐场)?:

while IFS= read -r file
do
    sed -e 's/<[^>]*>//g' "$file"
done < "rcv1"
Run Code Online (Sandbox Code Playgroud)

您可能希望对给定目录中的所有文件执行此操作,而不是从文件中读取它们.在这种情况下,使用循环遍历当前目录中的文件for:

for file in *
do
    sed -e 's/<[^>]*>//g' "$file"
done
Run Code Online (Sandbox Code Playgroud)

此外,如果您希望更改这些文件,可能需要使用-i以便更改就地发生.也就是说,文件本身会被新版本修改.为安全起见,请说明sed -i.bak创建了备份文件.

全部一起:

sed -i.bak -e 's/<[^>]*>//g' "$file"
Run Code Online (Sandbox Code Playgroud)

  • 伟大的一个@fedorqui (3认同)