【问题标题】:sed string replacement containing special characters包含特殊字符的 sed 字符串替换
【发布时间】:2014-03-30 02:43:12
【问题描述】:

我有一个输入文件——“3dchess.sh”——其内容类似于:

#!/bin/sh
Package=3dchess
Popcon=48
Section=universe

Comment=3D chess for X11
Exec=3Dc

我需要从以下位置替换“评论”标签:

Comment=3D chess for X11 

到:

Comment='<span size="xx-large">3D chess for X11</b>'

我已经尝试过了,但在我的情况下它不起作用:

sed -i ':Comment=:s:Comment=:Comment='<span size="xx-large">:g;/Comment=/s/$/</b>'/' $HOME/3dchess.sh

【问题讨论】:

  • 给我发现的问题是:Comment='和'中的单引号也失败了之间的/,如何解决?
  • 您可以转义搜索/替换模式中的斜杠 (s/.../&lt;\/b&gt;/) 或使用其他正则表达式分隔符 (s|...|&lt;/b&gt;|)

标签: sed


【解决方案1】:

试试:

echo "Comment=3D chess for X11" | \
  sed  's|Comment=|&'\''<span size="xx-large">|; s|Comment=.*|&</b>'\''|'

这个

Comment=3D chess for X11

会变成

Comment='&lt;span size="xx-large"&gt;3D chess for X11&lt;/b&gt;'


编辑:尽我所能,这是我的sed 解释:

's|Comment=|&'\''<span size="xx-large">|; s|Comment=.*|&</b>'\''|'

使用 sed (s) 替换命令将旧字符串 (Comments=) 替换为新字符串 (&amp;'\''&lt;span size="xx-large"&gt;; 由旧字符串 (&amp;) + 单引号 '\'' + 组成另一个字符串 (&lt;span size="xx-large"&gt;))。

然后 (;) 执行另一个 sed (s) 替换命令来替换旧字符串 (Comment=.*; 它由字符串 (Comments=) + 之后的任何内容 (.*) 组成) 到新字符串 (&amp;&lt;/b&gt;'\''; 由旧字符串 (&amp;) + 另一个字符串 (&lt;/br&gt;) + 单引号 ('\'')) 组成

【讨论】:

  • @davidva,添加解释:)
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多