如何使用 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 循环文件并将输出保存在不同的文件中?的主要内容,如果未能解决你的问题,请参考以下文章