0
我正在編寫一個簡單的bash腳本來將一個IP端口傳遞給一個正則表達式到一個awk命令。我在尋找港口僅在局部目的地通過bash shell腳本傳遞動態正則表達式
下面是代碼:
#!/bin/bash
s=$1
port="/[^0-9]$s$/"
netstat -numeric | awk -v pat="$port" '$6 == "ESTABLISHED" && $4 ~ pat {print}'
下面是示例數據的。
tcp 0 0 1.9.1.1:23 1.9.2.1:54156 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.4:51376 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53299 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:64695 ESTABLISHED
tcp 0 0 1.9.1.1:53086 1.9.1.8:23 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53296 ESTABLISHED
當我運行腳本時,它什麼都不返回。
當我手動運行它,它返回如下:
netstat -numeric | awk '$6 == "ESTABLISHED" && $4 ~ /[^0-9]23$/ {print}'
tcp 0 0 1.9.1.1:23 1.9.2.1:54156 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.4:51376 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53299 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:64695 ESTABLISHED
tcp 0 0 1.9.1.1:23 1.9.2.1:53296 ESTABLISHED
任何建議將不勝感激。
所以/.../是隱含的。 thx的幫助 – Drewber49er
不,他們不是暗示的,請閱讀我所說的話。 '/.../'是用於常量正則表達式**的**分隔符。你沒有使用一個常量正則表達式,你正在使用一個動態正則表達式,並且你將正則表達式作爲一個字符串保存在一個變量中,而在一個字符串中'/'只是一個字面的'/'字符。在'/ foo /'中'/'不是正則表達式的一部分,它們是正則表達式的分隔符,它們將其定義爲正則表達式常量。你可以使用'''分隔符('$ 0〜「foo」'),但這會使正則表達式成爲一個動態正則表達式。 –