关于linux:在目录和子目录中查找并替换sed

Find and replace with sed in directory and sub directories

我运行此命令,在我的站点根目录下的所有文件中查找所有出现的"apple"并将其替换为"orange":

1
find ./ -exec sed -i 's/apple/orange/g' {} \;

但它不经过子目录。

这个命令有什么问题?

下面是find ./的一些输出行:

1
2
3
4
5
6
7
./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php


为避免向SED发送目录名,您的搜索结果应如下所示:

1
find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;


对于较大的S&R任务,使用grep和xargs更好更快,因此,例如;

1
grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'


这对我很有用:

1
find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;


1
grep -e apple your_site_root/**/*.* -s -l | xargs sed -i"""s|apple|orage|"

我想我们可以用一行简单的命令

1
for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done

请参阅本页。


在LIUXOS:

1
sed -i 's/textSerch/textReplace/g' namefile

如果"SED"不工作,请尝试:

1
perl -i -pe 's/textSerch/textReplace/g' namefile