Распознайте целое слово (IP-адрес) с помощью 'sed'

Да, можно просто поставить # (или любой другой символ, если исходная запись, например ssh-rsa больше недействительна), перед соответствующей строкой.

Если вы сделаете это, и система также позволит ввести простой текстовый пароль, то пользователю будет предложено ввести пароль для входа в систему. Поэтому, возможно, вы захотите проверить, что с учетной записью нет (известных) ассоциированных паролей.

0
02.11.2014, 05:28
2 ответа

Если вы используете современные SED, следующие работы:

sed -e 's/\(^\|[^0-9]\)1\.2\.3\.4\($\|[^0-9]\)/\1NEWIP\2/'

IE, заменить 1.2.3.4 Newip , если в начале линия или предшественнее незначающая, и если дополнительно в конце строки или последование незначающей.

Со старой версией SED, которая не поддерживает расширенные регуляторы Regexps, это сложнее. Вы можете сделать это, например, используя маркировочные символы. Нам нужны два персонажа, которые гарантированно не происходят на входе. В растворе ниже я использую , и : здесь, но любые другие символы будут делать, даже контрольные символы.

sed -e 's/\(1\.2\.3\.4\)/,\1:/;s/\([0-9]\),/\1/;s/:\([0-9]\)/\1/;s/,.*:/NEWIP/;s/[,:]//'

Мы впервые вкладываем , до и : после шаблона, которую мы хотим заменить; Затем мы удаляем , , если он предшествует цифру и : , после чего следует цифра; Затем мы заменяем строку из , - : (если все еще присутствуют) с помощью строки замены; Наконец мы удаляем оставшиеся , или : .

С Perl можно также использовать негативное утверждение о внешности (?! \ D) и негативное утверждение позади (? для обеспечения То, что шаблон только соответствует только в том случае, если не предшествует цифру:

perl -pe 's/(?<!\d)1\.2\.3\.4(?!\d)/NEWIP/;'
1
28.01.2020, 02:36

Вы не сказали, что вы хотите сделать с линиями, которые не содержат действительного IP, поэтому я предполагаю, что вы просто хотите игнорировать их. Затем все, что вам нужно сделать, это убедиться, что вся линия соответствует тремя группам от одного до трех чисел ( [0-9] {1,3} ), затем окончательная группа из одного до трех чисел. Вот три способа сделать это:

  • GNU SED

     SED -R 'S / ^ ([0-9] {1,3} \.) {3} [0-9] {1,3}  $ / 5.6.7.8 / 'Файл
     
  • Не-GNU SED

     SED 'S / ^ \ ([0-9] \ {1,3 \} \. \) \ {3 \} [0-9] \ {1,3 \}  $ / 5.6.7.8 / 'Файл
     
  • Perl

     Perl -pe 'S / ^ (\ d {1,3} \.) {3} \ d {1,3} $ / 5.6.7.8/' Файл
     
1
28.01.2020, 02:36

Теги

Похожие вопросы