我运行了这个命令,在我的站点根目录中查找并替换所有出现的 'apple' 为 'orange':
find ./ -exec sed -i 's/apple/orange/g' {} \;
但它不会遍历子目录。
这个命令有什么问题?
以下是find ./
的一些输出行:
./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php
我运行了这个命令,在我的站点根目录中查找并替换所有出现的 'apple' 为 'orange':
find ./ -exec sed -i 's/apple/orange/g' {} \;
但它不会遍历子目录。
这个命令有什么问题?
以下是find ./
的一些输出行:
./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php
为避免将目录名称传递给sed
,您的find
应该像这样:
find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;
sed -i 's/apple/orange/g'
改成 sed -i '' 's/apple/orange/g'
。请注意不要改变原意。 - paulmelnikow-i
需要一个参数:用于保存临时文件的扩展名。在GNU sed中,-i
和其参数之间似乎没有空格,但在BSD sed中有空格...因此BSD的-i'' 's/foo/bar/'
相当于GNU的-i 's/foo/bar/'
。 - paulmelnikow'{}'
,因为如果不加引号,fish会自动扩展空花括号。 - Kevin Cherepski对于更大的搜索和替换任务,使用grep和xargs会更好、更快,例如:
grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'
git grep -l 'apples' | xargs sed -i 's/apples/oranges/g'
甚至更快。 - mrodriguesxargs sed -i'' 's/apples/oranges/g'
。 - cacti5sed
命令并将 /
替换为 |
,例如 ... xargs sed -i 's|mduuid/apples|mduuid/oranges|g'
。参考链接:https://dev59.com/LlkR5IYBdhLWcg3w3A0M - NessDan因为也有 macOS 用户阅读此文(就像我一样),以下代码对我有效(在 10.14 上)
egrep -rl '<pattern>' <dir> | xargs -I@ sed -i '' 's/<arg1>/<arg2>/g' @
在 macOS 上,使用-i
和-e
的所有其他答案都无效。
find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;
*.php
是错误的;你只是幸运地没有在起始目录中展开它,因为你碰巧没有匹配的文件。 - tripleeefind
命令中,可以使用-name *.php
来获取文件名的限制。 - alericgrep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orange|"
发现了一个非常好的程序,叫做 ruplacer
https://github.com/dmerejkowsky/ruplacer
用法
ruplacer before_text after_text # prints out list of things it will replace
ruplacer before_text after_text --go # executes the replacements
.gitignore
,因此不会破坏您的 .git
或 node_modules
目录(默认情况下,find .
将进入您的 .git 目录并可能损坏它!!!)我觉得我们可以用一行简单的命令完成这个。
for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done
请参考此页面。
sed -i 's/textSerch/textReplace/g' namefile
perl -i -pe 's/textSerch/textReplace/g' namefile
src/**/.js
。 - alex