linux - 在所有文件中搜索和替换 URL

标签 linux shell sed text-processing

我正在寻找运行脚本或命令来批量更改作为 URL 的字符串。我在这个论坛上看过很多例子,但没有一个有效。

我创建了一个 .sh 文件来运行以下命令:

$SRC='$url = "https://www.myurl.com/subdir/process.do"';
$DST='$url="https://api.myurl.com/subdir/process.do"';
find . -type f -name "*.php" -exec sed -i 's/$SRC/$DST/g' {} +;

这是行不通的。我想这可能是因为搜索内容中有反斜杠?需要在 .php 文件的所有子目录中运行搜索/替换。

如有任何帮助,我们将不胜感激。

谢谢!

最佳答案

首先 - 检查您的变量定义。在 bash 中,变量定义通常不以前导 $ 开头。即,应该是:

SRC='$url = "https://www.myurl.com/subdir/process.do"';
DST='$url="https://api.myurl.com/subdir/process.do"';

接下来,您应该切换为对模式使用单引号,对变量使用双引号,如下所示: https://askubuntu.com/questions/76808/how-do-i-use-variables-in-a-sed-command

似乎可行的示例:

sed -i 's,'"$SRC"','"$DST"','

更新:这个脚本在 Linux 上非常适合我:

 #!/bin/bash
 SRC='$url = "https://www.myurl.com/subdir/process.do"'; 
 DST='$url="https://api.myurl.com/subdir/process.do"';
 find . -type f -name "*.php" -exec sed -i 's,'"$SRC"','"$DST"',' {} \;

在主目录中创建的文件“asdf.php”的内容(运行脚本之前):

 $url = "https://www.myurl.com/subdir/process.do"

运行脚本后“asdf.php”文件的内容:

 $url="https://api.myurl.com/subdir/process.do"

关于linux - 在所有文件中搜索和替换 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518690/

相关文章:

php - 服务器IPC设计问题

shell - Sed 插入多行

linux - 如何通过 Rails3 运行 Bash 脚本?

linux - 无法准备上下文 : path ".\r" not found

linux - 如何在 linux 中查找字符串并将其添加到文件中

shell - 双击执行shell脚本

shell - Ctrl+Backspace 的终端键代码是什么

regex - Linux下批量重命名

regex - 如何使用sed搜索替换文件中的多行

linux - 当内容缩小时动态缩小 GTK+ 中的窗口?