Как мне grep строку, которая содержит две запятые - PullRequest
0 голосов
/ 03 июля 2018

У меня есть файл IP, и у каждой строки есть два или три IP через запятую, как -

ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 223.179.196.169, 10.121.15.135
ip x 157.41.161.64, 10.121.15.135
ip x 49.14.160.119, 10.121.15.191
ip x 157.41.230.108, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191

Итак, я хочу отобразить строки, содержащие две запятые (три IP), например -

ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191

Я много искал, но не получил конкретного ответа, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Если у вас есть и другие строки, которые могут иметь что-то еще от IP-адресов, то последующее может помочь вам, которое проверит количество полей, а также удостоверится, что в 1-м, 2-м и 3-м полях есть IP-адреса.

awk -F, 'NF==3 && \
$1 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$3 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/'  Input_file
0 голосов
/ 03 июля 2018

Вы можете использовать awk:

awk -F, 'NF==3' file

-F, устанавливает разделитель на ,. NF - это специальная переменная, которая содержит количество полей. Если условие NF==3 выполнено, awk напечатает текущую строку.


С (e) grep это будет примерно так:

grep -E '^([^,]+,){2}[^,]+$' file

Я бы лично использовал awk, потому что он гораздо более читабелен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...