我想使用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