sed/awk:从字符串中提取一个数字

sed/awk:从字符串中提取一个数字

我有许多像下面这样的行是从 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\"

相关内容