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

Posted

技术标签:

【中文标题】如何使用 sed 循环文件并将输出保存在不同的文件中?【英文标题】:How to loop over files and save output in different files using sed? 【发布时间】:2019-12-27 22:12:36 【问题描述】:

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

其实我想遍历文件,然后对两者都做这样的事情:

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

这可能对你有用(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/

【讨论】:

以上是关于如何使用 sed 循环文件并将输出保存在不同的文件中?的主要内容,如果未能解决你的问题,请参考以下文章

sed命令基本使用

将 Matlab 中循环的输出保存在不同的文件夹中

sed

sed命令总结

sed命令详解

如何根据来自不同命令的多行打印输出的输入将文本文件内容替换为“sed”或“awk”?