在目录和子目录中使用 sed 进行查找和替换
- 2024-10-12 09:08:00
- admin 原创
- 68
问题描述:
我运行此命令来查找我的网站根目录中的所有文件中出现的“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
解决方案 1:
您find
应该看起来像这样,以避免将目录名称发送到sed
:
find ./ -type f -exec sed -i -e 's/apple/orange/g' {} ;
解决方案 2:
对于更大的 s&r 任务,使用 grep 和 xargs 会更好、更快,例如;
grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'
解决方案 3:
因为也有 macOS 用户阅读了这篇文章(就像我一样),所以下面的代码对我有用(在 10.14 上)
egrep -rl '<pattern>' <dir> | xargs -I@ sed -i '' 's/<arg1>/<arg2>/g' @
-i
所有其他使用和的答案-e
在 macOS 上均不起作用。
来源
解决方案 4:
这对我有用:
find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} ;
解决方案 5:
grep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orange|"
解决方案 6:
找到了一个很棒的程序,叫做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 目录并可能损坏它!)
解决方案 7:
我认为我们可以用一行简单的命令来完成这个
for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done
请参阅此页面。
解决方案 8:
在linux操作系统中:
sed -i 's/textSerch/textReplace/g' namefile
如果“sed”不起作用,请尝试:
perl -i -pe 's/textSerch/textReplace/g' namefile
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD