sed 未按预期工作(尝试在字符串中的两个匹配项之间获取值)



我有一个文件(/tmp/test),里面有一个字符串"aaabbbccc"

我想用 sed 从字符串中提取"bbb"。

这样做将返回整个字符串:

sed -n '/aaa/,/ccc/p' /tmp/test

我只想用 sed 从字符串中返回 bbb(我正在尝试学习 sed,所以对其他解决方案不感兴趣)

Sed 在基本行上工作,a,b{action}将对匹配a的行运行操作,直到与b匹配的行。在您的情况下

sed -n '/aaa/,/ccc/p'

将在匹配/aaa/时开始打印行,并在匹配/ccc/时停止,这不是您想要的。

要操作一行,有乘法选项,s/search/replace/一个可用于删除前导aaa和尾随ccc

% sed 's/^aaa|ccc$//g' /tmp/test
bbb

故障:

s/
  ^aaa  # Match literal aaa in beginning of string
  |    # ... or ...
  ccc$  # Match literal ccc at the end of the sting
//      # Replace with nothing
g       # Global (Do until there is no more matches, normally when a match is
        # found and replacement is made this command stops replacing) 

如果您不确定有多少个ac可以使用:

% sed 's/^aa*|cc*$//g' /tmp/test
bbb

这将匹配文字a后跟行首的零个或多个ac也是如此,但只是在最后。

使用 GNU sed:

sed 's/aaa(.*)ccc/1/' /tmp/test

输出:

嘟嘟��

请参阅: 堆栈溢出正则表达式常见问题解答

相关内容

  • 没有找到相关文章

最新更新