gpt4 book ai didi

Linux:如何在单一类型的所有文件中用另一个替换字符串的所有实例

转载 作者:太空狗 更新时间:2023-10-29 11:33:40 24 4
gpt4 key购买 nike

例如,我想将文件夹中所有 .txt 文件中包含的“123”的所有实例替换为“321”(递归)。我想过这样做

sed -i 's/123/321/g' | find . -name \*.txt

但在可能搞砸我所有的文件之前,我想问一下它是否有效。

最佳答案

您有 sedfind 回到前面。使用 GNU sed-i 选项,您可以使用:

find . -name '*.txt' -type f -exec sed -i s/123/321/g {} +

find 查找扩展名为 .txt 的文件并对它们的组运行 sed -i 命令(即 + 最后;它是 POSIX 2008 中的标准,但并非所有版本的 find 都必须支持它)。在此示例替换中,不存在对 s/123/321/g 命令的误解的危险,因此我没有将其括在引号中。但是,为了简单和一般安全,最好尽可能将 sed 脚本用单引号引起来。

您还可以使用 xargs(并再次使用 GNU 扩展 -print0find-0 以及-rxargs):

find . -name '*.txt' -type f -print0 | xargs -0 -r sed -i 's/123/321/g'

-r 表示“如果没有参数则不运行”(因此 find 没有找到任何东西)。 -print0-0 协同工作,生成以 C 空字节 '\0' 而不是换行符结尾的文件名,并且避免误解包含换行符、空格等的文件名。

请注意,在对真实数据运行脚本之前,您可以而且应该对其进行测试。创建一个虚拟目录(我通常称它为 junk),将一些示例文件复制到垃圾目录中,将目录更改为垃圾目录,然后在这些文件上测试您的脚本。由于它们是副本,因此即使出现问题也不会造成任何伤害。然后您可以简单地删除目录中的所有内容:rm -fr junk 永远不会让您感到痛苦。

关于Linux:如何在单一类型的所有文件中用另一个替换字符串的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12679119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com