使用sed替换为单引号



我想使用sed将一组字符替换为'

这篇文章建议:

如果参数周围有单引号(sed's/…/…/'(,请使用'''在替换文本中放置单引号。

所以,我尝试了以下操作:

echo 'abcd' | sed 's/[abcd]/'/g'

但它最终只是期待更多的投入:

anir@DESKTOP-4856511:~$ echo 'abcd' | sed 's/[abcd]/'/g'
>
>
>
> ^C

当我在.sh文件中复制粘贴echo 'abcd' | sed 's/[abcd]/'/g'并运行时,它给了我以下错误:

anir@DESKTOP-4856511:~/Mahesha999/delete$ ./trysed.sh
./trysed.sh: line 1: unexpected EOF while looking for matching `''
./trysed.sh: line 2: syntax error: unexpected end of file

做这件事的正确方法是什么?在单引号字符串中转义单引号是不可能的吗(而且我只能像这里解释的那样使用双引号(?

正如帖子所说:

如果参数(sed 's/…/…/'(周围有单引号,请使用'''在替换文本中放置单引号。

因此,使用您的示例,您可以执行以下操作:

echo 'abcd' | sed 's/[abcd]/'''/g'

如果你只想用一个报价取代:

echo 'abcd' | sed 's/[abcd][abcd]*/'''/g'

shell不允许在单引号字符串中使用单引号。上面的代码所做的是创建三个字符串(它们没有任何分隔(:

  • 单引号字符串:'s/[abcd]/'
  • 仅包含转义单引号的无引号字符串:'
  • 单引号字符串:'/g'

然后shell将它们展开,因为它们没有分离,所以它们实际上连接成一个字符串。

sed见:s/[abcd]/'/g

相关内容

  • 没有找到相关文章

最新更新