[英]Regular expression in awk in bash shell script
我完全是一個正則表達式新手,我認為我的代碼問題在於我在awk的match函數中使用的正則表達式 。
#!/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中。
$line
傳遞給awk,否則無法在腳本中使用它。 .
以及數字,你必須將它添加到正則表達式。 嘗試這樣的事情:
cc=$(awk 'NR == 167 && match($0, /[0-9.]+/) { print substr($0, RSTART, RLENGTH) }' models.html)
三件事:
你需要使用-v
將line
的值傳遞給awk:
awk -v line="$line" ...
您的正則表達式僅匹配一個數字。 要匹配浮動,你需要類似的東西
[0-9]+\.[0-9]+
無需為子字符串的匹配長度添加1
substr(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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.