我完全是一个正则表达新手,我认为我的代码问题在于我在awk的匹配函数中使用的正则表达式。
#!/bin/bash
...
line=$(sed -n '167p' models.html)
echo "line: $line"
cc=$(awk -v regex="[0-9]" 'BEGIN { match(line, regex); pattern_match=substr(line, RSTART, RLENGTH+1); print pattern_match}')
echo "cc: $cc"
结果是:
line: <td><center>0.97</center></td>
cc:
实际上,我想将数值0.97提取到变量cc。
答案 0 :(得分:2)
$line
传递给awk,否则无法在脚本中使用。.
以及数字,则必须将其添加到正则表达式中。尝试这样的事情:
cc=$(awk 'NR == 167 && match($0, /[0-9.]+/) { print substr($0, RSTART, RLENGTH) }' models.html)
答案 1 :(得分:1)
三件事:
您需要使用line
-v
的值传递给awk
awk -v line="$line" ...
您的正则表达式只匹配一个数字。要匹配浮点数,您需要类似
的内容[0-9]+\.[0-9]+
无需为子串
的匹配长度添加1substr(line, RSTART, RLENGTH)
全部放在一起:
line='<td><center>0.97</center></td>'
echo "line: $line"
cc=$(awk -v line="$line" -v regex="[0-9]+\.[0-9]+" 'BEGIN { match(line, regex); pattern_match=substr(line, RSTART, RLENGTH); print pattern_match}')
echo "cc: $cc"
结果:
line: <td><center>0.97</center></td>
cc: 0.97