什么" %%"在sed正则表达式中意味着什么?

时间:2018-05-11 18:31:25

标签: regex bash sed

在代码库中,有一行:

echo x/y/z | sed 's%/[^/]*$%%'

它将从输入字符串中删除/z

我无法理解它。

  • s是替换
  • %/引用了/
  • [^/]*$表示从行尾
  • 中随时匹配除/以外的任何字符

但这里的%%是什么?

1 个答案:

答案 0 :(得分:2)

这是info sed

  

'/'字符可以被任何其他单独统一替换   任何给定's'命令中的字符。 '/'字符(或其他   其他字符用于替代)可以出现在REGEXP或   只有在前面带有'\'字符时才能替换。

所以%只是一个任意的分隔符。规范分隔符为/,但与您的模式/发生冲突。

换句话说,%/不是转义/。他们是独立的角色。

表达式如下所示:

s              Replace
  %              Delimiter
    /[^/]*$        Search pattern
  %              Delimiter
                   Empty replacement string
  %              Delimiter

这与简单的s/foo/bar/

完全相似
s              Replace
  /              Delimiter
    foo            Search pattern
  /              Delimiter
    bar            Replacement string
  /              Delimiter