Bash连接奇怪的输出?

时间:2015-02-18 18:52:55

标签: regex bash concatenation

我正在尝试将一个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相当新,所以我认为这很容易,但有什么帮助吗?

由于

1 个答案:

答案 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]+)'