2015-02-18 3 views
-1

Я пытаюсь объединить строку IP с остальной частью RegExp для более поздней команды. Вот код:Bash concatenate wierd output?

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. и позже он имеет escape-последовательность \ (например, 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, так что я предполагаю, что это что-то реально легко, но любая помощь?

Благодаря

+0

Не требуется, значение, возвращаемое с него, является строкой IP-строки, например. 127.0.0.1 –

+4

не так ли? действительно? http://stackoverflow.com/help/mcve, то почему бы вам не подставить его в свой код? –

+0

http://pastebin.com/2bRbFnvR –

ответ

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

Aha! Это был пробел в файле, я изменил первую строку на '' 'ip = $ (grep -oP 'server-ip = \ K (. *)' Server.properties | tr -d '[[: space:]] ') '' 'и он работает сейчас! Благодаря! –

+2

Нет проблем. Прислушайтесь к советам комментатора о формировании вопроса и не забывайте в подобных случаях изолировать разные фрагменты, которые могут потерпеть неудачу. Вы были очень близки к решению этого самостоятельно, когда вы не получаете ожидаемый результат от цепных команд, всегда проверяйте их один за другим. – zzevannn