当 $ 在搜索模式中时替换文本中的 sed '



我有一个包含字符串"this $c$ 是单引号"的文件,创建如下:

 %echo "this $c$ is a single quote" > test3.txt
 %cat test3.txt
this $c$ is a single quote

我想用单引号替换字母 c,但我也需要匹配 $ 字符(以避免匹配其他字符"c")。 我似乎做不到。

我试过了

 %sed 's/$c$/$foo$/' test3.txt
this $c$ is a single quote

所以显然我需要逃避 $。

 %sed 's/$c$/$foo$/' test3.txt
this $foo$ is a single quote

但是当我尝试在替换文本中输入转义的 ' 时,我得到

 %sed 's/$c$/$'$/' test3.txt
quote>

所以我需要使用其他一些引用方法。

 %sed "s/$c$/$'$/" test3.txt
this $c$ is a single quote

没有替换任何东西,所以让我们尽量不要转义$

 %sed "s/$c$/$'$/" test3.txt
this $c$ is a single quote$'$

这出乎意料(对我来说),所以让我们尝试只匹配c作为健全性检查。

 %sed "s/c/'/" test3.txt
this $'$ is a single quote

我尝试了许多其他组合,但没有运气。 如何在sed中执行此操作?

这个怎么样?

!$ echo 'This is $c$ ceee' | sed s/\$c\$/'/
This is ' ceee

我不会将整个 sed 的命令括在引号中,所以我需要分别转义每个反斜杠和每一美元(当然还有引号)。

编辑
正如克里斯·李尔(Chris Lear)指出的那样,我的替换字符串不包含美元。这是一个修复 - 请注意,这些美元对sed没有特殊含义(它们不被解释为匹配符号它们只是要插入的普通字符),因此它们只能转义一次:

!$ echo 'This is $c$ ceee' | sed s/\$c\$/\$'\$/
This is $'$ ceee
!$ echo 'This is $c$ ceee' | sed s/\$c\$/$'$/
This is $'$ ceee

如果你想引用sed命令,你需要做大量的转义。 $是外壳和sed图案的特殊字符。 在 shell 中,它意味着要扩展的变量名称的开始,$c在您的情况下。 sed它意味着行的结束。 要进行引用,您需要从这两个中转义它,以便您可以这样做

 sed "s/\$c\$/$'$/" test3.txt

或者你可以混合你的引用样式,在$扩展周围使用单引号,在你的单引号周围使用双引号,比如

sed 's/$c$/$'"'"'$/' test3.txt

你可以使用 ansi c 字符串

sed $'s/$c$/'/' 

这允许 $ s 和 ' s 的单个反斜杠转义。

更多信息在这里

如果你想保持$

sed $'s/$c$/$'$/'

试试这个:

sed -i -E "s/([$]c[$])/'/g" sed.txt

相关内容

  • 没有找到相关文章

最新更新