这
$echo '| foo | bar | baz |' | sed 's@^|[^|]*|\([^|]*\)|.*@\1@'
bar
按要求返回。我该如何对 opt 做同样的事情-E
?
https://www.gnu.org/software/sed/manual/html_node/Extended-regexps.html
答案1
尝试:
$ echo '| foo | bar | baz |' | sed -E 's@^\|[^|]*\|([^|]*)\|.*@\1@'
bar
笔记:
在扩展正则表达式中,组是用
(...)
而不是 组成的\(...\)
。在扩展正则表达式中,
|
通常意味着交替。要将其解释为字符,需要对其进行转义。 (此规则的例外是在[...]
其中|
只是一个常规字符。
替代方案:使用 awk
$ echo '| foo | bar | baz |' | awk -F\| '{print $3}'
bar