在代码库中,有一行:
echo x/y/z | sed 's%/[^/]*$%%'
它将从输入字符串中删除/z
。
我无法理解它。
s
是替换%/
引用了/
[^/]*$
表示从行尾/
以外的任何字符
但这里的%%
是什么?
答案 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