我正在尝试将一个IP字符串与一个RegExp的其余部分连接起来,用于以后的命令。这是代码:
ip=$(grep -oP 'server-ip=\K(.*)' server.properties)
echo "Server IP: ${ip}"
ip=${ip//\./\\\.}
exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
regexp="${ip}$exp"
echo "netstat -tulpn | grep -oP '${regexp}'"
#pid=$(netstat -tulpn | grep -oP '${regexp}')
$ ip的值是有效的IP字符串。然后它会被。(例如127.0.0.1)
转义然后我尝试用$ exp连接$ ip值。对于预期的
输出 127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)
然而,相反,我得到的东西是
:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)\.0\.1
我对Bash相当新,所以我认为这很容易,但有什么帮助吗?
由于
答案 0 :(得分:2)
我还没有足够的声誉发表评论,但是在测试脚本中使用您的代码显式设置ip可获得预期的输出。如果修改你的盒子上的那个,那么我怀疑问题是你的grep获得IP。
~$ cat test2.sh
ip=127.0.0.1
echo "Server IP: ${ip}"
ip=${ip//\./\\\.}
exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
regexp="${ip}$exp"
echo "netstat -tulpn | grep -oP '${regexp}'"
~$ ./test2.sh
Server IP: 127.0.0.1
netstat -tulpn | grep -oP '127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
实际上,创建一个如下所示的server.properties:
~$ cat server.properties
server-ip=127.0.0.1
然后按原样运行脚本,似乎有效。问题似乎在于获得这个价值:
~$ cat ./test2.sh
ip=$(grep -oP 'server-ip=\K(.*)' server.properties)
echo "Server IP: ${ip}"
ip=${ip//\./\\\.}
exp=':19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'
regexp="${ip}$exp"
echo "netstat -tulpn | grep -oP '${regexp}'"
#pid=$(netstat -tulpn | grep -oP '${regexp}')
~$ ./test2.sh
Server IP: 127.0.0.1
netstat -tulpn | grep -oP '127\.0\.0\.1:19132\s+0\.0\.0\.0:.*\s+\K([0-9]+)'