在目录和子目录中查找并用 sed 替换

发布于 2024-11-25 08:21:55 字数 342 浏览 3 评论 0原文

我运行此命令来查找站点根目录中所有文件中所有出现的“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

I run this command to find and replace all occurrences of 'apple' with 'orange' in all files in root of my site:

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

But it doesn't go through sub directories.

What is wrong with this command?

Here are some lines of output of find ./:

./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

逆光下的微笑 2024-12-02 08:21:55

您的 find 应该如下所示,以避免将目录名称发送到 sed

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

Your find should look like that to avoid sending directory names to sed:

find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;
心如荒岛 2024-12-02 08:21:55

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

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

For larger s&r tasks it's better and faster to use grep and xargs, so, for example;

grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'
陌伤ぢ 2024-12-02 08:21:55

由于也有 macOS 人员阅读这篇文章(就像我一样),因此以下代码对我有用(在 10.14 上)

egrep -rl '<pattern>' <dir> | xargs -I@ sed -i '' 's/<arg1>/<arg2>/g' @

使用 -i-e 的所有其他答案都不起作用在 macOS 上工作。

来源

Since there are also macOS folks reading this one (as I did), the following code worked for me (on 10.14)

egrep -rl '<pattern>' <dir> | xargs -I@ sed -i '' 's/<arg1>/<arg2>/g' @

All other answers using -i and -e do not work on macOS.

Source

一场信仰旅途 2024-12-02 08:21:55

这对我有用:

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

This worked for me:

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;
束缚m 2024-12-02 08:21:55
grep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orange|"
grep -e apple your_site_root/**/*.* -s -l | xargs sed -i "" "s|apple|orange|"
吻风 2024-12-02 08:21:55

找到了一个很棒的程序,名为 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 因此它不会弄乱您的 .gitnode_modules 目录(find . 默认情况下会进入您的 .git 目录并可能损坏它!!!)

Found a great program for this called ruplacer

https://github.com/dmerejkowsky/ruplacer

Usage

ruplacer before_text after_text # prints out list of things it will replace
ruplacer before_text after_text --go # executes the replacements

It also respects .gitignore so it won't mess up your .git or node_modules directories (find . by default will go into your .git directory and can corrupt it!!!)

漫漫岁月 2024-12-02 08:21:55

我认为我们可以用一行简单的命令来完成此操作

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

请参阅此 页面

I think we can do this with one line simple command

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

Refer to this page.

榆西 2024-12-02 08:21:55

在 linuxOS 中:

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

如果“sed”不起作用,请尝试:

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

In linuxOS:

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

if "sed" not work try :

perl -i -pe 's/textSerch/textReplace/g' namefile
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文