如何从文件中获取数字并将其分配给变量

gau*_*rma 0 shell awk sed

我有一个包含 html 响应代码的文件,如下所示:

<d:ChangeType>SSCR</d:ChangeType>
<d:Status>Success</d:Status>
<d:ShortDescription>API </d:ShortDescription>
<d:CycleTypeId>8000006005</d:CycleTypeId>
<d:RfcNumber>1200000910</d:RfcNumber>
<d:ExtrefNumber>API External</d:ExtrefNumber>
Run Code Online (Sandbox Code Playgroud)

在本例中,要求是获取<d:RfcNumber></d:RfcNumber>之间的数字1200000910并将其提供给变量。

我正在尝试使用 sed 像:

sed 's/1200000910.*//' test2.html 
Run Code Online (Sandbox Code Playgroud)

但它没有给我提供预期的结果。

对此的任何帮助将不胜感激。

Rav*_*h13 5

第一个解决方案:因为您正在使用sed假设您在这里使用 shell 。您可以awk在这里使用命令。只需为所有行使用awk和设置字段分隔符在主程序中检查字段数是否大于 2,然后打印第二个字段。<d:RfcNumber><\\/d:RfcNumber>

var=$(awk -F'<d:RfcNumber>|<\\/d:RfcNumber>' 'NF>2{print $2;exit}' Input_file)
Run Code Online (Sandbox Code Playgroud)

第二个解决方案:使用 GNUawkmatch函数来获取标签之间的值。

var=$(awk 'match($0,/^<d:RfcNumber>([^<]*)<\/d:RfcNumber>/,arr){print arr[1];exit}' Input_file)
Run Code Online (Sandbox Code Playgroud)

第三种解决方案:或者sed请尝试以下代码,使用-EGNU 的选项sed在代码中使用 ERE(扩展正则表达式)。

var=$(sed -E -n 's/^<d:RfcNumber>([^<]*)<\/d:RfcNumber>/\1/p' Input_file)
Run Code Online (Sandbox Code Playgroud)