sed中的空“ s ///”语句-究竟是什么?

时间:2019-07-10 11:38:58

标签: shell sed

found激发了我的兴趣,这是一个古老的短壳脚本:

cd ~/RCS
for f in .*,v
do printf '%3d  %s\n' \
  $(rlog -h $f | sed '/total revisions: /!d;s///') \
  $f
done | sort -nr

看着sed脚本,我注意到空的s语句:s///。我看了一下documentation,却没有发现这个问题。

我的猜测是,将空正则表达式与模式(即“ total revisions:”)进行匹配,匹配,然后被替换为空,即将其删除。那会发生什么吗?这是sed脚本编写的常见用法吗?如果是这样,我在哪里可以了解到更多信息?

1 个答案:

答案 0 :(得分:2)

从OS X上的man sed

  

sed正则表达式的一个特殊功能是它们可以默认为最后使用的正则表达式。如果正则表达式为空,即仅指定分隔符,则使用遇到的最后一个正则表达式。最后一个正则表达式定义为在地址或替换命令中使用的最后一个正则表达式,并且在运行时而不是编译时使用。例如,命令/abc/s//XXX/XXX替换为模式abc

编辑:来自your docs

  

空正则表达式//重复最后一个正则表达式匹配项(如果将空正则表达式传递给s命令,则保持相同)。请注意,在编译正则表达式时会评估正则表达式的修饰符,因此将其与空的正则表达式一起指定是无效的。