【发布时间】:2020-12-28 00:25:14
【问题描述】:
a=a
b=ab
c=''
d=''
echo ac | sed "s/$a/$b/;"
abc
echo ac | sed "s/$a/$b/; s/$c/$d/"
bc
为什么 sed 会删除上一个示例中的字符 'a'?
【问题讨论】:
a=a
b=ab
c=''
d=''
echo ac | sed "s/$a/$b/;"
abc
echo ac | sed "s/$a/$b/; s/$c/$d/"
bc
为什么 sed 会删除上一个示例中的字符 'a'?
【问题讨论】:
发生这种情况是因为$c是一个空字符串,当sed被传递给带有空模式的后续s命令时,会使用前一个,在这种情况下,$a,即@ 987654326@.
所以,
echo ac | \
sed "s/$a/$b/; s/$c/$d/"
# a ab a
这里,
a 替换为 ab 先替换为 s/a/ab/(ac 变为 abc)a 与 s/a// 一起被删除(abc 变为 bc)。请参阅文档,Regular Expressions in sed section:
如果一个 RE 是空的(即没有指定模式)sed 应该表现得就像在最后一个应用的命令中使用的最后一个 RE(作为地址或作为替代命令的一部分) ) 已指定。
【讨论】: