Intereting Posts
OpenVPN: Маршрутизация по названию адреса или порту, а не по IP сокращение для подачи содержимого нескольких файлов в stdin скрипта Linux Mint 13 Mate: по умолчанию текущее имя пользователя синаптическая аутентификация Как создать исходный deb для пакета с двоичными файлами и не-двоичными файлами? Как предоставить пользователю разрешение на все, кроме файлов env? Измените тему Xfce из сценария bash Список файлов, содержащих меньше N строк, соответствующих шаблону / строке Как работает подсветка экрана? Зачем графическим программам нужно назначить окно? Синхронизация двух компьютеров с унисон и ssh DDRescue занимает месяцы, но ошибок нет? Как скомпилировать ядро ​​для гостя KVM (без паравиртуализации)? Печать повторяющегося рисунка Как добавить путь к исходному каталогу, который будет обнаружен Unix, какая команда? Массовое переименование файлов – удаление места

регулярное выражение grep grep в команде sed

Я пытаюсь создать скрипт, который найдет / заменит экземпляры соответствия строк:

vc/integer 

Файл / etc / securetty содержит следующие строки:

 vc/1 vc/2 vc/3 vc/4 vc/5 vc/6 vc/7 vc/8 vc/9 vc/10 vc/11 grep -E 'vc/(\d{0,4}\D)*' /etc/securetty | while read line; do sed -ie "s=$line==g" /etc/securetty; done 

Как и ожидалось, вышеупомянутая команда удаляет все упомянутые строки, но не выделяет вторую цифру, 0 и 1, которые являются частью двух последних строк, vc / 1 0 vc / 1 1 . Я остался с файлом, содержащим

 0 1 

Как изменить команду для удаления одно и двухзначных совпадений?

Почему бы вам просто не сделать это просто?

 sed -i -e 's|vc/[0-9]\{1,\}||g' /etc/security 

Объяснение:

regex [0-9]\{1,\} => 1 или более совпадений предыдущего атома, которое в вашем случае оказывается [0-9] . Обратите внимание, что \d+ хотя и эквивалентно тому, что я дал [0-9]\{1,\} , не соответствует требованиям POSIX. В этом же ключе заметим, что [0-9]\{0,\} эквивалентно \d* .