Awk
如果正則表達式不匹配,則 awk 退出程式碼
如果第 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