我有一个包含字符串"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