如何从命令行进行递归查找和替换?

Jad*_*Yao 2 bash shell readline

是否有一种简单的方法可以递归地在目录层次结构中的所有文件中搜索一个词(例如port),然后用另一个词(例如)替换该词的所有出现port-lookup

我曾尝试在建议这个职位,但他们只适用于一个单一的文件。

Uda*_*age 5

尝试这个

find ./ -type f -exec sed -i -e 's/port/port-lookup/g' {} \;
Run Code Online (Sandbox Code Playgroud)

如果您不想更改文件修改时间

grep -rl 'port' /search_in_this_dir | xargs sed -i 's/port/port-offset/g' 
Run Code Online (Sandbox Code Playgroud)


Tra*_*rke 5

实现此目的的最简单(也可以说是最纯粹和直观)的方法是执行递归文件grep,然后将这些文件结果通过管道传输到 sed (通过xargs)来处理就地替换。

grep -r -l "port" | xargs -r -d'\n' sed -i 's/port/port-lookup/g'
Run Code Online (Sandbox Code Playgroud)

有一个关于这个主题的全面的社区 wiki 答案,我建议您在 Unix & Linux 交流上阅读。