SED 加号不起作用



我试图将/.//././/./././替换为仅在bash脚本中/。我已经设法为 sed 创建了正则表达式,但它不起作用。

variable="something/./././"
variable=$(echo $variable | sed "s//(./)+///g")
echo $variable # this should output "something/"

当我尝试仅替换/./子字符串时,它适用于 sed /./ 中的正则表达式。sed 正则表达式是否需要更多标志才能使用子字符串与 +* 的乘法?

使用-r选项使sed使用扩展正则表达式:

$ variable="something/./././"
$ echo $variable | sed -r "s//(./)+///g"
something/

任何 sed:

sed 's|/(./){1,}|/|g'

但是在这种情况下甚至不需要+{1,}*会做得很好,所以

sed 's|/(./)*|/|g'

应该足够了

简化两件事:

$ variable="something/./././"
$ sed -r 's#(./){1,}##' <<< "$variable"
something/
  • 使用{1,}指示一个或多个模式。你不需要g这个。
  • 在上述情况下#使用不同的分隔符以使其可读
  • +是 ERE,因此您需要启用-E-r选项才能使用它

你也可以使用 bash 的内置参数替换来做到这一点。这不需要 sed ,它不接受 OS X 下的 Mac 上的-r

variable="something/./././"
a=${variable//*/}/                   # Remove slash and everything after it, then re-apply slash afterwards
echo $a
something/

有关解释和其他示例,请参阅此处。

相关内容

  • 没有找到相关文章

最新更新