Получить определенный текст в выводе Bash

Я хочу получить 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)

Не могли бы вы скопировать и вставить содержимое изображения? Спасибо

Allan 29.05.2018 08:00

Я ответил на ваш второй вопрос

Allan 29.05.2018 09:02

@ 1995, постарайтесь собрать все вопросы в одном посте. Также добавьте свои усилия в свой пост, так как мы все здесь, чтобы учиться, ура.

RavinderSingh13 29.05.2018 09:05

Совет для новичков: если ответ решает вашу проблему, примите его, щелкнув большую галочку (✓) рядом с ним, и, при желании, проголосуйте за него (для голосования требуется не менее 15 очков репутации). Если вы нашли другие ответы полезными, проголосуйте за них. Принятие и голосование помогают будущим читателям. См. [Соответствующую статью Справочного центра] [1] [1]: stackoverflow.com/help/someone-answers

Allan 29.05.2018 10:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
219
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

$grep 'VPN Server Host Name' file.txt | awk -F '|' '{print $2}'
159.89.199.192

Хорошо, но вы можете объединить grep и awk в одной команде ;-)

Allan 29.05.2018 08:10

@sonali, добро пожаловать в SO, пожалуйста, всегда оборачивайте свой код в CODE TAGS кнопку поиска {} для ваших сообщений, желаю вам удачи и продолжайте делиться знаниями :)

RavinderSingh13 29.05.2018 08:38

Конечно, так лучше :)

sonali srivastava 29.05.2018 16:43
Ответ принят как подходящий

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

$ 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 -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.

Спасибо. Оно работает! Не могли бы вы объяснить, что делает код? Я хочу понять это, чтобы научиться.

1995 29.05.2018 08:14

@ 1995: конечно !!! Я добавил несколько пояснений, есть ли какая-то конкретная часть, которая вам не понятна?

Allan 29.05.2018 08:15

Наверное, все. Хахаха. Я собираюсь прочитать об awk и sed и попробовать изучить их. Еще раз спасибо. Последний вопрос, а что, если IP находится между ними. Таким образом, строка1 192.168.1.1 строка2.

1995 29.05.2018 08:30

@ 1995, проверьте и мое решение один раз, где я проверяю это второе поле с регулярным выражением об IP, хотя, поскольку ваше требование не так ясно, вы можете сообщить нам о полном вопросе, если это не сработает для вас.

RavinderSingh13 29.05.2018 08:32

@ RavinderSingh13 Я обновил свой вопрос. Надеюсь, ты сможешь мне помочь.

1995 29.05.2018 08:52

@ 1995: Я добавил ответ на ip с портом ;-)

Allan 29.05.2018 09:03

@ 1995, пожалуйста, проверьте мое решение EDIT сейчас, также попробуйте задать все вопросы за один раз, дайте мне знать?

RavinderSingh13 29.05.2018 09:03

@Allan Спасибо, Аллан. Ваш код не так страшен для понимания. Хахаха. Я ценю вашу помощь.

1995 29.05.2018 09:58

Обновлено: Поскольку 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}'

Это может сработать для вас (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-адреса в отдельных строках.

Спасибо. Я получил то, что хотел. Я все еще новичок в bash, поэтому я даже не понимаю код, который вы написали, но еще раз спасибо.

1995 29.05.2018 08:56

@ 1995 regexp - это небольшой язык, который позволяет вам проверять, находить и заменять строки внутри строк. Потратьте на них несколько минут, и они сэкономят вам часы спустя.

potong 29.05.2018 09:21

@potong Я изучал эта ссылка, но приведенный выше код мне все еще не совсем понятен. Не могли бы вы добавить пошаговое объяснение человек читаемый?

Wiktor Stribiżew 29.05.2018 10:55

Другие вопросы по теме