Получить конкретный текст в выводе Bash - PullRequest
0 голосов
/ 29 мая 2018

Я хочу получить IP только из этого вывода, но не знаю, как. Можно ли ограничить вывод только тем, что я хочу.

VPN Connection Setting Name                          |kap1
Destination VPN Server Host Name                     |159.89.199.192
Destination VPN Server Port Number                   |5252
Destination VPN Server Virtual Hub Name              |kap
Proxy Server Type                                    |Direct TCP/IP 

Другая проблема.У ip есть порт.Я только хочу IP.Извините за другой вопрос.Я ценю вашу помощь всем вам.

VPN Connection Setting Name |kap1
Status                      |Connected
VPN Server Hostname         |159.89.199.192:5252 (Direct TCP/IP Connection)

Ответы [ 4 ]

0 голосов
/ 29 мая 2018

Это может работать для вас (GNU sed):

sed -r '/\n/!s/([0-9]{1,3}\.){3}[0-9]{1,3}/\n&\n/;/^\S+[0-9]\n/P;D' file

Окружать все IP-адреса новыми строками и печатать только те строки, которые соответствуют.

Первое регулярное выражение ищет новые строки.Новые строки - это то, что sed использует для разделения строк, которые он помещает в пространство шаблонов (PS).Поэтому, как правило, новые строки никогда не будут найдены естественным образом в PS, если они не введены пользователем посредством команды замещения.Таким образом, первая команда говорит: «Если в шаблонном пространстве уже нет новых строк, то есть уже сделано следующее замещение. Окружите строку, которая выглядит как IP-адрес, с новыми строками».IP-адрес сопоставляется от одной до трех цифр, за которыми следует точка, повторяющаяся три раза, за которой следуют от одной до трех цифр.Следующая команда sed печатает любые такие IP-адреса, а последняя команда удаляет первую строку в PS независимо от того, был ли это IP-адрес.Если PS пуст, после команды D, следующая строка читается в противном случае sed снова выполняет циклическое выполнение команд.Таким образом, общий эффект команд заключается в перечислении всех IP-адресов в отдельных строках.

0 голосов
/ 29 мая 2018

Представьте, что у вас есть входной файл:

$ cat vpn_info 
Item                                  |Value
--------------------------------------+--------
VPN Connection                        |kap1
Destination VPN Server Host Name      |159.89.199.192
Destination VPN Server Port Number    |5252
...
...

Затем вы можете использовать одну из следующих команд:

AWK:

awk -F '|' '/^Destination VPN Server Host Name/{print $2}' vpn_info                                                            
159.89.199.192

Вы определяете | как разделитель полей, затем печатаете 2-е поле ввода, когда строка начинается с Destination VPN Server Host Name

SED:

sed -n 's/^Destination VPN Server Host Name *|//p' vpn_info 
159.89.199.192

Вы просите sed заменить ^Destination VPN Server Host Name *| ничем, и когда это сработает, вы печатаете результат.

2-й ввод:

$ cat vpn_info 
Item                                  |Value
--------------------------------------+--------
VPN Connection                        |kap1
VPN Server Hostname                   |159.89.199.192:5252 (Direct TCP/IP Connection)

AWK

$ awk -F '[:|]' '/VPN Server Hostname/{print $2}' vpn_info                                                         
159.89.199.192

Вы можете использовать эту команду awk, где вы указываете 2 разделителя полей : и |, и вы печатаете 2-е поле, когда достигнете строки, содержащей VPN Server Hostname

0 голосов
/ 29 мая 2018

РЕДАКТИРОВАТЬ: Поскольку OP говорит, что OP имеют другой тип Input_file, поэтому добавьте решение соответственно.

awk '/Hostname/ && match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){print substr($0,RSTART,RLENGTH)}' Input_file

После awkможет помочь вам здесь.

awk -F"|" '/Destination VPN Server Host Name/ && $2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2}'  Input_file

ИЛИ

your_command | awk -F"|" '/Destination VPN Server Host Name/ && $2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2}'
0 голосов
/ 29 мая 2018

Учитывая данные, которыми вы поделились, сохраняется в файле.Имя файла: file.txt

$grep 'VPN Server Host Name' file.txt | awk -F '|' '{print $2}'
159.89.199.192
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...