我有许多行,像下面这样从bash命令返回,具有不同的数字长度的sourceNodeIds
:
<NodeAssociation sourceNodeId="33654" [...] sourceNodeEntity="Issue" />
我想sourceNodeId="nnnn"
到sed或awk,只需从sourceNodeId="nnnn"
返回数字nnnn
就像是:
cat blah | sed 's/.+?sourceNodeId="\(\d+\)".+/\1/'
但是这不起作用。 我在Mac上,如果这有什么区别(我认为sed的版本可能会有所不同)。 我知道Perl的正则expression式,但我认为sed期待着一种不同的types。
谢谢!!!
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
另外,作品:
cat blah | cut -f2 -d\"