Awk

如果正則表達式不匹配,則 awk 退出程式碼

  • May 30, 2020

如果第 4 列與正則表達式不匹配,我想獲得退出程式碼 1,但即使正則表達式不匹配,awk 似乎也會返回 0。

如果正則表達式不匹配,知道如何讓 awk 返回 1 嗎?

root@server:~# netstat -nap|grep "LISTEN\b"
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1144/rsync          
tcp        0      0 1.2.3.4.5:53                0.0.0.0:*                   LISTEN      25213/named         
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      25213/named         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      28888/sshd          
tcp        0      0 0.0.0.0:9686                0.0.0.0:*                   LISTEN      1150/stunnel        
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      25213/named         
root@server:~# netstat -nap|grep "LISTEN\b"|awk '$4 ~ /:80$/ {print $NF}'
root@server:~# echo $?
0

您可以設置一個變數來保存返回碼,然後在退出之前否定該變數:

netstat -nap    |
grep "LISTEN\b" |
awk '$4 ~ /:80$/ {rc = 1; print $NF}; END { exit !rc }'

如果不需要\b,則可以刪除grep部分:

netstat -nap | awk '/LISTEN/ && $4 ~ /:80$/ {rc = 1; print $NF}; END { exit !rc }'

對我來說,這是 awk 不可原諒的罪過;如果需要錯誤狀態,我通過管道連接到 grep 點,而不是上面的 awk 體操

$ date | awk '/Fri/'
Fri May 29 21:26:18 EDT 2020
$ date | awk '/Fri/' | grep .
Fri May 29 21:27:11 EDT 2020
$ echo $?
0
$ date | awk '/Mon/' | grep .
$ echo $?
1

引用自:https://unix.stackexchange.com/questions/308838