Regex 正则表达式外壳脚本将文件的特定部分保存到变量

Regex 正则表达式外壳脚本将文件的特定部分保存到变量,regex,shell,expression,Regex,Shell,Expression,我需要一些命令的帮助来处理以下情况。 我在网上寻找帮助,但找不到解决办法 问题是: 我有一个名为“temp.xml”的xml文件 例如,xml文件中的文本是 <?xml version="1.0" encoding="utf-8"?> <NoteData Note_Nbr="312" Data_Revision="2" Note_Revision="1" /> 感谢您的帮助。正确的方法是使用真正的XML解析器: x=$(xmllint --xpath 'string(/

我需要一些命令的帮助来处理以下情况。 我在网上寻找帮助,但找不到解决办法

问题是:

我有一个名为“temp.xml”的xml文件 例如,xml文件中的文本是

<?xml version="1.0" encoding="utf-8"?>
<NoteData Note_Nbr="312" Data_Revision="2" Note_Revision="1" />

感谢您的帮助。

正确的方法是使用真正的XML解析器:

x=$(xmllint --xpath 'string(/NoteData/@Note_Nbr)' test.xml)
…或者,如果您使用的是XMLStarlet而不是足够新的xmllint:

x=$(xmlstarlet sel -t -m '/NoteData' -v @Note_Nbr -n <test.xml)
x=$(xmlstarlet sel-t-m'/NoteData'-v@Note\u Nbr-n&2
fi

谢谢您的回复。当我尝试此命令时,它会给我一个错误未知选项--xpath@UmutDönmez不幸的是,xmllint的旧版本没有
--xpath
;这就是为什么我还提供了xmlstarlet版本。我很高兴这很有帮助。
x=$(xmlstarlet sel -t -m '/NoteData' -v @Note_Nbr -n <test.xml)
s='<NoteData Note_Nbr="312" Data_Revision="2" Note_Revision="1" />'
s=${s#* Note_Nbr=\"}; s=${s%%\"*}; echo "$s"
s='<NoteData Note_Nbr="312" Data_Revision="2" Note_Revision="1" />'
re='Note_Nbr="([^"]+)"'
if [[ $s =~ $re ]]; then
  match="${BASH_REMATCH[1]}"
else
  echo "ERROR: No match found" >&2
fi