我有许多像下面这样的行是从 bash 命令返回的,具有不同的sourceNodeIds
数字长度:
<NodeAssociation sourceNodeId="33654" [...] sourceNodeEntity="Issue" />
我想将其通过管道传输到 sed 或 awk,然后返回数字 nnnnsourceNodeId="nnnn"
就像是:
cat blah | sed 's/.+?sourceNodeId="\(\d+\)".+/\1/'
但这不起作用。我使用的是 Mac,不知道这有什么区别(我认为 sed 的版本可能不同)。我知道 Perl 正则表达式,但我认为 sed 期望的是另一种类型。
谢谢!!!
答案1
sed
不知道\d
和非贪婪匹配。你不需要使用cat
。这应该有效:
sed 's/.*sourceNodeId="\([0-9]\+\)".*/\1/' file
有些sed
版本对于要求很挑剔-e
(即使不是必需的它也会起作用):
sed -e 's/.*sourceNodeId="\([0-9]\+\)".*/\1/' file
如果你sed
支持-r
你可以跳过转义:
sed -er 's/.*sourceNodeId="([0-9]+)".*/\1/' file
答案2
另外,作品:
cat blah | cut -f2 -d\"