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