【问题标题】:Find and Replace using sed, awk or grep使用 sed、awk 或 grep 查找和替换
【发布时间】:2016-12-15 02:22:41
【问题描述】:

如何使用 sed、awk 或 grep 在下面的数据中找到“UP”一词并将其替换为“DOWN”?

document.getElementById("p1").innerHTML = "API Dev :: UP";
document.getElementById("p2").innerHTML = "API QA :: UP";
document.getElementById("p3").innerHTML = "API Reg :: UP";
document.getElementById("p4").innerHTML = "API Prod :: UP";

我希望一次查找/替换一行。类似于使用for loop,然后逐行查找/替换。

谢谢!

【问题讨论】:

  • 请解释one line at a time

标签: bash shell awk sed grep


【解决方案1】:

这是 sed 101:

sed 's/:: UP/:: DOWN/'

【讨论】:

  • 我们如何才能找到/替换一行又一行,但不能同时查找/替换所有行。
  • 您为什么要这样做?会很慢。
  • 如果我在脚本中加入上述行,它将立即替换所有行 URL=grep "document.getElementById" index.html | awk -F' ' '{print $7}'` for var in $URL do SERVICE_STATUS=curl -s --head $URL | head -n 1 | awk '{print $2}' if [[ $SERVICE_STATUS -eq "200" ]] then sed 's/:: UP/:: DOWN/' index.html fi done`
【解决方案2】:
echo line | sed 's/UP/DOWN/'

其中 line 是要替换的字符串

【讨论】:

    【解决方案3】:

    虽然@john-zwinck 的回答为您提供了解决方案,但如果您想要更受限制的模式,请执行以下操作

     sed -E 's/(API[[:blank:]]*[[:alnum:]]+[[:blank:]]*::[[:blank:]]*)UP/\1DOWN/'
                                                                        filename
    

    这会给你

    document.getElementById("p1").innerHTML = "API Dev :: DOWN";
    document.getElementById("p2").innerHTML = "API QA :: DOWN";
    document.getElementById("p3").innerHTML = "API Reg :: DOWN";
    document.getElementById("p4").innerHTML = "API Prod :: DOWN";
    

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 2014-12-04
      • 1970-01-01
      • 2020-02-03
      • 2014-02-11
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多