更改多个文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

以下命令正确更改2个文件的内容。

sed -i 's/abc/xyz/g' xaa1 xab1 

但我需要做的是动态地改变几个这样的文件,我不知道文件名。我想编写一个命令来读取当前目录中的所有文件,xa*并且sed应该更改文件内容。

提问于
用户回答回答于

更好的是:

for i in xa*; do
    sed -i 's/asd/dfg/g' $i
done

因为没有人知道有多少文件,并且很容易打破命令行限制。

以下是文件过多时会发生的情况:

# grep -c aaa *
-bash: /bin/grep: Argument list too long
# for i in *; do grep -c aaa $i; done
0
... (output skipped)
#
用户回答回答于

我很惊讶没有人提到要找到的-exec参数,这可能是这样做的正确方法:

find . -type f -name 'xa*' -exec sed -i 's/asd/dsg/g' {} \;

或者,可以使用xargs,这会调用更少的进程:

find . -type f -name 'xa*' | xargs sed -i 's/asd/dsg/g'

扫码关注云+社区