【问题标题】:Search and replace URL in all files在所有文件中搜索和替换 URL
【发布时间】:2018-03-27 17:07:33
【问题描述】:

我正在寻找运行脚本或命令来批量更改作为 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 文件的所有子目录中运行搜索/替换。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

标签: linux shell sed text-processing


【解决方案1】:

第一件事 - 检查您的变量定义。在 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"

【讨论】:

  • 您的解决方案似乎不起作用。我还尝试一起删除变量。寻找 。 -type f -name *.php -exec sed -i 's/'"myurl.com/subdir/process.do"'/'"https://…' {} +;
  • 尝试使用逗号而不是斜线,即: find 。 -type f -name *.php -exec sed -i 's,'"yoururl"','"yournewurl"',' {} \;
  • 这似乎有帮助,但还有其他错误发生。在 search.sh 第 1 行,“name '.php'”附近的操作员预期的位置找到字符串(您需要预先声明名称吗?) 在 name.sh 第 1 行,“i's, 附近的操作员预期的位置找到字符串, “myurl.com/subdir/process.do","https://api.myurl.com/…'”(是否需要预先声明 i?) search.sh 第 1 行,“name '.php'”附近的语法错误
猜你喜欢
  • 2011-06-15
  • 2020-05-12
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2012-02-25
  • 2014-06-01
相关资源
最近更新 更多