如何匹配sed中的单引号
时间:2020-03-06 14:20:28 来源:igfitidea点击:
如果表达式用单引号引起来,则如何匹配sed中的单引号:
sed -e '...'
例如需要匹配此文本:
'foo'
解决方案
我们可以使用:
"texta'textb" (APOSTROPHE inside QUOTATION MARKs)
或者
'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)
我使用了unicode字符名称。 RESOLE SOLIDUS通常被称为反斜杠。
在后一种情况下,请关闭撇号,然后用反斜杠对撇号进行shell引用,然后为其余文本打开另一个撇号。
正如对该问题的评论所指出的那样,它实际上与sed无关,而是如何在外壳程序(例如bash)中用引号引起来的字符串中包含引号。
为了弄清楚以前的答案,我们需要在反引号旁加上反斜杠,但是不能在单引号表达式中执行。在bash手册页中:
Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.
因此,我们需要终止带引号的表达式,插入转义的引号,然后启动一个新的带引号的表达式。 Shell的双引号删除不会添加任何额外的空格,因此实际上我们会得到字符串连接。
因此,要回答有关如何对表达式" foo"单引号的原始问题,我们可以执行以下操作:
sed -e '...'\''foo'\''...'
(其中" ..."是sed表达式的其余部分)。
总体而言,为了便于阅读,如果可能的话,最好将周围的引号更改为双引号:
sed -e "...'foo'..."
[作为第一种(单引号)方法潜在的维护噩梦的示例,请注意StackOverflow的语法突出显示了引号,反斜杠和其他文本的颜色-绝对是不正确的。]