регулярное выражение 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 

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

One Solution collect form web for “регулярное выражение grep grep в команде sed”

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

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

  • Вставить новые строки с sed?
  • sed, чтобы удалить все строки с рисунком и добавить строки в конце
  • замените строку строки 6 после сопоставления строки
  • Сопоставление двух разных линий, расположенных по крайней мере на N прямых друг от друга
  • sed специальный символ заменить не работает в сценарии оболочки
  • удалить содержимое с начала на первую пустую строку
  • вернуть первый экземпляр символов из списка
  • Замена Perl / Sed
  • поиск и замена с помощью grep (not sed)
  • Удалить строки, содержащие путь к файлу с помощью sed
  • Объединение полей из строк с различным количеством полей
  • Linux и Unix - лучшая ОС в мире.