如何使用sed遍历文件并将输出保存在不同的文件中?

时间:2019-08-22 14:37:23

标签: linux bash shell sed command

我有两个不同的文件A.txt和B.txt,它们都包含相同的字符串。 我想使用sed命令来替换字符串,但是我不想覆盖A.txt和B.txt。

实际上,我想遍历文件,然后对两个文件都执行以下操作:

sed 's/myString/myNewString/g' A.txt > updatedA.txt

我可以使用什么技巧以这种方式将输出重定向到所需的任意数量的文件?假设我有x * .txt文件。

谢谢。

2 个答案:

答案 0 :(得分:1)

使用for循环访问当前目录中的所有.txt文件:

for file in *.txt; do
  sed 's/myString/myNewString/g' "$file" > "updated$file"
done

每个目录只能使用此脚本一次。

答案 1 :(得分:0)

这可能对您有用(GNU并行):

parallel sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt

这将循环遍历当前目录中的所有txt文件,并对以updated为前缀的新文件进行修改/复制。

如果您只想为具有更改的文件创建文件,请使用:

parallel grep myString {} \&\& sed 's/myString/myNewString/g' {} \> updated{} ::: *.txt

或通过目录中的所有txt文件重新进行诅咒,请使用:

find . -name '*.txt' | parallel sed 's/myString/myNewString/g' {} \> {//}/updated{/}