【问题标题】:Replacing file text with sed用 sed 替换文件文本
【发布时间】:2022-10-21 20:25:54
【问题描述】:

我正在做一个 bash 脚本,我有一个 txt 文件,我需要在其中编辑一些文本

我需要更换这个

<h3> >> 1.10 Ping Desde XXXXXXXXXX01-PRD a 10.xxx.xx.xx ==> [ OK ] </h3>

对此

<h3> >> 1.10 Ping Desde XXXXXXXXXX01-PRD a 10.xxx.xx.xx ==> <span style="color: green">[ OK ] </span></h3>

我尝试使用 sed 但没有成功。

我已经做到了

sed -i 's/==> [ OK ]/==> <span style="color:green">[ OK ]</span>/g' "temp.txt"

带有错误响应

sed: -e expression #1, char 53: unknown option to `s'

然后我尝试了一个用于替换 url 的解决方案,而不是使用“%”的“/”

sed -i 's%==> [ OK ]%==> <span style='color:green'>[ OK ]</span>%g' "temp.txt" 

没有错误消息,但也没有文件文本更改。

如果有人知道该怎么做,我将不胜感激

【问题讨论】:

  • 我建议使用 XML/HTML 解析器(xmlstarlet、xmllint ...)。
  • 也许我稍后会检查一下,但是对于我需要的脚本可以使用 sed 运行,

标签: bash sed terminal


【解决方案1】:

您需要转义左方括号才能使代码正常运行

$ sed 's%==> [ OK ]%==> <span style='color:green'>[ OK ]</span>%g' temp.txt

或者

$ sed -E 's#([^[]*)([[^]]*])# <span style="color: green"></span>#' temp.txt
<h3> >> 1.10 Ping Desde XXXXXXXXXX01-PRD a 10.xxx.xx.xx ==>  <span style="color: green">[ OK ]</span> </h3>

【讨论】:

  • 假设只有 [ OK ] 而不是说 [ FAIL ] 需要绿色:s%[ OK ]%&lt;span style="color:green&gt;&amp;&lt;/span&gt; ... 只需使用 &amp; 而不是 parens 捕获组。
  • 第一个是我需要的,实际上运行得很好,谢谢,也许有更好的方法,但我做到了.sed 's%==&gt; [ OK ]%==&gt; &lt;span style='color:green'&gt;[ OK ]&lt;/span&gt;%g' temp.txt.sed 's%==&gt; [ ERROR ]%==&gt; &lt;span style='color:red'&gt;[ ERROR ]&lt;/span&gt;%g' temp.txt
【解决方案2】:

您需要在模式中转义 []

$ echo "<h3> >> 1.10 Ping Desde XXXXXXXXXX01-PRD a 10.xxx.xx.xx ==> [ OK ] </h3>" | sed 's/==> [ OK ]/==> <span style="color:green">[ OK ]</span>/g'
<h3> >> 1.10 Ping Desde XXXXXXXXXX01-PRD a 10.xxx.xx.xx ==> <span style="color:green">[ OK ]</span> </h3>

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2011-11-25
    • 2012-10-14
    • 1970-01-01
    • 2020-02-27
    • 2020-01-24
    • 2021-09-25
    相关资源
    最近更新 更多