Linux查找和替换

15
如何使用shell脚本将文件夹中所有文件中的字符串"abc"替换为"abcd"
是否可以使用sed命令实现?

1
是的,这是可能的。请查看相关的手册页面... - Vikram.exe
@Vikram.exe,man页面并没有解释关于sed正则表达式的任何内容。 - fge
@fge,这方面也有一个人手册 :) 或者查看:http://linux.die.net/man/7/regex - Vikram.exe
3个回答

39

尝试运行以下命令来处理文件 file.txt:

sed -i 's/abc/abcd/g' file.txt


尝试在当前文件夹中对所有文件使用以下命令:

find . -maxdepth 1 -type f -exec sed -i 's/abc/abcd/g' {} \;

对于当前目录和所有子目录中的文件:

find . -type f -exec sed -i 's/abc/abcd/g' {} \;

或者如果你是 xargs 的粉丝:

find . -type f  | xargs -I {}  sed -i 's/abc/abcd/g' {}

我需要对文件夹中的所有文件进行操作,而不是单个文件。 - Subhojit Mukherjee
1
+1 是为了找到文件。因为如果目录有子目录,那些 sed...* 解决方案都会失败。 - Kent
如果不打算进行递归子目录搜索,则建议使用“-maxdepth”。 - thiton
替换部分可以缩短为&d,因为&指的是匹配的文本。 - fge
我可以让它也显示结果吗? - ryanwinchester
显示剩余2条评论

2
sed -i 's/abc/&d/g' *

应该可以工作。


它还将替换0abcdabcd等。 - fge
是的,问题只是要替换abc。没有关于“整个单词”的指示。 - Nikodemus RIP
老问题 - 但我在2023年发现这很有用!在我看来,使用 * 比使用文件命令进行过滤更容易。 - rwcorbett

0

是的:

find /the/folder -type f -exec sed -i 's,\<abc\>,&d,g' {} \;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接