Удаление всех экземпляров определенного регулярного выражения из текста с помощью Perl

ОП явно спрашивает о сообщениях, отображаемых ПОСЛЕ входа в систему, все «/etc/issue» отображаются ДО ввода логина и пароля, поэтому они не по теме -.

Шаги «оболочки входа»::

  1. показать сообщения, содержащиеся в/etc/issue
  2. запросить пользователя и пароль
  3. показать Сообщение дня от:

    /etc/motd

    /etc/update-motd.d

  4. пуск /etc/profileи~/.bash_profile

NB.bashrc выполняется для НЕ -оболочки входа в систему

@Naftuli Kay добавьте свое изображение ASCII в /etc/motdвы также можете поместить скрипт в /etc/update-motd.d; для печати, не зависящей от пользователя, сценарий может находиться в /etc/profile. ~/.bash_profileдля однопользовательской печати

0
26.04.2020, 22:24
2 ответа

Для удаления:

  • символ [(\[)
  • сразу после заглавной буквы([A-Z]только Ascii)
  • или (чередование )строкойcf(([A-Z]|cf)).
  • затем следует любое количество символов и пробелов([^]]не])
  • до](\]).

Вы можете использовать (в Perl )любой из:

\[([A-Z]|cf)[^]]\]        # Ascii uppercase, avoid `]`
[[]([A-Z]|cf)[^]][]]      # A bit more confusing expression of the same.
[[]([A-Z]|cf).*?[]]       # Use a lazy quantifier (the shorter match).
[[](\p{Lu}|cf).*?[]]      # Unicode property: Letter Uppercase.
\[(\p{Lu}|cf).*?\]        # Probably easier to read.

Если не использовать выражение диапазона с отрицанием([^]])или отложенное сопоставление (.*?), выражение будет соответствовать всей строке:

this part [CP 5.491] or this part [cf 283: 56 in Colapietro, 1989, p. XIV]

Не каждая часть.

perl -pe '$_ =~ s/\[(\p{Lu}|cf).*?\]//g' file
0
19.03.2021, 02:25

Если предположить, что используется только набор символов ASCII, состоящий из заглавных букв, этого может быть достаточно, если вы хотите удалить совпадающую строку целиком:

perl -ne 'print unless m{\[([A-Z]|cf).*\]}' file

Если вы хотите удалить только такие разделы, как «[CP 5.491], оставив окружающий текст:

perl -pe 's{\[([A-Z]|cf).*?\]}{}g' file
0
19.03.2021, 02:25

Теги

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