【问题标题】:Why is sed not extracting value?为什么 sed 不提取价值?
【发布时间】: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.

标签: regex sed


【解决方案1】:

sed 用于替换字符串。您正在尝试提取。

使用(如John1024 said

echo "abc-def-stg" | sed '/.*-//'

它将删除所有连字符,包括最后一个连字符。或者

echo "abc-def-stg" | grep -oE '[^-]+$'

它将提取字符串末尾除连字符以外的所有字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2022-07-25
    • 2019-09-22
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多