我有一个包含 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)
但它没有给我提供预期的结果。
对此的任何帮助将不胜感激。
第一个解决方案:因为您正在使用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)
第二个解决方案:使用 GNUawk的match函数来获取标签之间的值。
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)