簡體   English   中英

在bash shell腳本中的awk中的正則表達式

[英]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中。

  • 您需要將shell變量$line傳遞給awk,否則無法在腳本中使用它。
  • 或者,您可以使用awk讀取文件(根本不需要涉及sed)。
  • 如果你想匹配. 以及數字,你必須將它添加到正則表達式。

嘗試這樣的事情:

cc=$(awk 'NR == 167 && match($0, /[0-9.]+/) { print substr($0, RSTART, RLENGTH) }' models.html)

三件事:

你需要使用-vline的值傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM