【问题标题】:Find and replace text on multiple files查找和替换多个文件上的文本
【发布时间】:2014-08-22 18:33:21
【问题描述】:

我正在尝试用其 https 版本替换许多 html 页面上存在的特定链接。我试过了:

grep -rl "http://server.iad.liveperson.net/hc/88956865/" ./ | xargs sed -i "s/http:\/\/server.iad.liveperson.net\/hc\/88956865\//https:\/\/server.iad.liveperson.net\/hc\/88956865\//g"

当我这样做时,即使是sudo,我也会得到

sed: couldn't open temporary file ./customers/sedTR3AMu: Permission denied

customers 只是./ 中的第一个目录。所以,它挂在我认为的第一个文件上,但不确定除此之外还有什么问题。

感谢任何帮助!

【问题讨论】:

  • sed 使用不同的分隔符。 sed 's_http://server.iad.liveperson.net/hc/88956865/_https://server.iad.liveperson.net/hc/88956865/_g 因为sed 混淆了分隔符的开始和结束位置。

标签: linux bash ubuntu sed


【解决方案1】:

您应该尝试的第一件事是单独运行sed 命令,用于您之前知道的包含该字符串的文件。我感觉sed 命令可能在抱怨/ 字符...

您应该尝试将sed 命令更改为:

sed -i 's;http://server.iad.liveperson.net/hc/88956865/;https://server.iad.liveperson.net/hc/88956865/;g'

也就是说,使用;而不是/作为分隔符,因此您不必每次使用\时都对/进行转义。

【讨论】:

  • 文字句点前面应该有反斜杠。
【解决方案2】:

必须以 root 身份运行命令,因为 sed -i 在 /tmp 中创建临时文件并且需要写入权限。

谢谢:使用 jim 的语法和分号,效果很好。 ooga,我不必逃避文字句号。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 2013-01-29
    • 2013-12-26
    • 2014-01-14
    • 2012-08-29
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多