Как заменить неизвестный IP-адрес в определенной строке текстового файла - PullRequest
1 голос
/ 10 июня 2019

Как применить эту команду sed к определенной строке в текстовом файле, а не ко всему файлу?

Я нашел здесь решение для замены любых IP-адресов в файле на определенный адрес. Мне нужно применить эту команду к определенной строке в файле, чтобы она заменяла только один неизвестный IP-адрес. Я видел, что sed использует -n для фильтрации, но я буквально ничего не знаю о том, как применить это для достижения моей цели.

Этот код работает для каждого IP в файле:

sed -e 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/x.x.x.x/g' test.txt

Как применить его к единственной строке в файле, которая также содержит строку "ipv4", чтобы другие строки, содержащие IP-адреса, оставались неизменными?

Ответы [ 3 ]

1 голос
/ 10 июня 2019

С вы можете использовать регулярное выражение в качестве адреса , например:

sed -re '/ipv4/s/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/x.x.x.x/g' test.txt

Если вы не укажете -r, вам нужно будет убрать скобки, т. Е .:

sed -e '/ipv4/s/[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/x.x.x.x/g' test.txt
0 голосов
/ 10 июня 2019

Если я правильно понял, вы хотите найти первое вхождение IP-адреса в строке, которая также содержит ipv4, и пропустить все остальные вхождения.

С GNU , попробуйте

sed -i -E '/ipv4/{s/[0-9]{1,3}(\.[0-9]{1,3}){3}/x.x.x.x/g;T;:a;n;ba}' test.txt

-E включит синтаксис POSIX ERE, не нужно экранировать {} и (). -i заменит встроенный файл непосредственно. /ipv4/ найдет строку с ipv4 на ней, а затем {s/[0-9]{1,3}(\.[0-9]{1,3}){3}/x.x.x.x/g;T;:a;n;ba} выполнит замену только на этой строке. См. объяснение Потонга T;:a;n;ba здесь

Если у вас POSIX sed, попробуйте

sed -e '/ipv4/ {' -e 's/[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/x.x.x.x/g' -e ':a' -e n -e 'ba' -e '}' file > newfile
0 голосов
/ 10 июня 2019

Вы можете пропустить неинтересные строки:

sed '/ipv4/!b;s/YOUR PATTERN HERE/YOUR IP HERE/' input
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...