【发布时间】:2019-08-19 20:40:02
【问题描述】:
当我使用 sed 运行我的正则表达式时
echo "abc-def-stg" | sed -e '/(\w*$)/g'
在 regexr.com 上它可以正常工作,但是当我尝试使用 stg 提取值时说它不起作用。
谁能解释一下原因?
【问题讨论】:
-
有两个基本问题: 1. sed 有自己的编程语言,需要的不仅仅是一个正则表达式。 2.“正则表达式”就像“面向对象”一样,它是一个通用概念,有很多不同的语言来表达它。 regexr 默认为 JSRE 并且还支持 PCRE,sed 的编程语言允许你嵌入 BRE(以及带有
-E的 ERE)。 -
echo "abc-def-stg" | sed 's/.*-\(.*\)/\1/'将满足您的需求。或awk -F'-' '{ print $3; }' -
更简单:
echo "abc-def-stg" | sed 's/.*-//' -
很少版本的 sed 或其他命令行工具会知道
\w的含义。也许你的意思是[[:alnum:]_]?您的输入字符串中也没有括号(),因此它无法在您的正则表达式中匹配它们。也许您想创建一个捕获组\(...\),但是您在替换文本中没有任何反向引用。实际上,您甚至没有替换文本。man sed.