Bash 连接奇怪的输出?
Bash concatenate wierd output?
我正在尝试将 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)
然后我尝试将 $ip 值与 $exp 连接起来。对于
的预期输出
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 的新手,所以我认为这很简单,但有什么帮助吗?
谢谢
我还没有足够的声誉来发表评论,但是在测试脚本中使用您的代码明确设置 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]+)'
我正在尝试将 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)
然后我尝试将 $ip 值与 $exp 连接起来。对于
的预期输出 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 的新手,所以我认为这很简单,但有什么帮助吗?
谢谢
我还没有足够的声誉来发表评论,但是在测试脚本中使用您的代码明确设置 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]+)'