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”'),但这会使正则表达式成为一个动态正则表达式。 –