我以下列格式从服务器接收数据:
gin</type><sessionId>1601</sessionId><directory><default>DepthOfBook</default><study type="DepthOfBook"/
我怎样才能从这个string中提取值1601? 我一直在尝试以下方法,但是我错过了正确的SED语法:
sed -n "/sessionId/,/\/sessionId/p" sed -e "s/<sessionId/\n/g"| sed -n "/sessionId/,/\/sessionId/p" sed -e "s/</\n/g"| sed -n "/sessionId/,/sessionId/p"
我怎样才能提取这个值(当string是一个长的多行string时,通常是两个XML标签之间的值)?
谢谢。
像这样的东西可以工作:
sed -e 's/<\/sessionId>/<\/sessionId>\n/g' | sed -n 's/.*<sessionId>\([^<]*\)<\/sessionId>.*/\1/p'
第一部分是因为sed在匹配的时候尝试尽可能地多吃一行,这会找到所有的sessionId
,并将它们自己分开。
下一部分匹配sessionId
标签之间的东西。
这可能适用于你(GNU sed):
sed '/<sessionId>/!d;s//\n/;s/[^\n]*\n//;:a;$!{/<\/sessionId>/!N;//!ba};y/\n/ /;s/<\/sessionId>/\n/;P;D' file
我建议使用XPath ,这是一种XML查询语言。 如果你安装了Perl XML :: XPath模块,那么你可以简单地在你的shell中使用下面的命令:
xpath -q -e '//sessionId/text()' <input_file>