我正在以下列格式从服务器接收数据:
gin</type><sessionId>1601</sessionId><directory><default>DepthOfBook</default><study type="DepthOfBook"/
如何从此字符串中提取值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"
如何提取此值(当字符串为1,长多行字符串时,通常是两个XML标记之间的值)?
感谢。
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed '/<sessionId>/!d;s//\n/;s/[^\n]*\n//;:a;$!{/<\/sessionId>/!N;//!ba};y/\n/ /;s/<\/sessionId>/\n/;P;D' file
答案 1 :(得分:1)
这样的事情会起作用:
sed -e 's/<\/sessionId>/<\/sessionId>\n/g' | sed -n 's/.*<sessionId>\([^<]*\)<\/sessionId>.*/\1/p'
第一部分是因为sed在匹配时尝试尽可能多地占用一行,这将找到所有sessionId
个出现并将它们分开在一条线上。
下一部分匹配sessionId
标记之间的内容。
答案 2 :(得分:0)
我建议使用XPath,这是一种XML查询语言。如果您安装了Perl XML::XPath模块,那么您只需在shell中使用以下命令:
xpath -q -e '//sessionId/text()' <input_file>