Как я могу кроме строки с grep? - PullRequest
1 голос
/ 16 апреля 2020

извините за вопрос новичка: я хочу получить grep-ссылки в .md-файле, за исключением специальной строки, которая начинается со специального слова.

Таким образом, мой index.md выглядит так:

[Test](202001-test)
BlaBla: [Test2]((202002-test2)

Мой код выглядит так:

grep -Eo '\[.*\]\([2].*\)' ~/script/index.md

Так что же мне написать, чтобы grep проигнорировал вторую строку? Не нашли ответа на сайтах регулярных выражений.

Привет

1 Ответ

0 голосов
/ 16 апреля 2020

Предполагается, что смысл состоит в сопоставлении подстрок, таких как [...](2...), которые не содержат лишних [ и ] в квадратных скобках и ( / ) в скобках, а если вы хотите, чтобы избегайте сопоставления строк, начинающихся с BlaBla:, вы можете рассмотреть возможность использования

grep -v '^BlaBla:' index.md | grep -o '\[[^][]*](2[^()]*)'

Здесь grep -v '^BlaBla:' инвертирует совпадение с опцией -v и выводит все строки, которые НЕ начинаются с BlaBla: , Затем второй grep получает необходимые действительные совпадения.

Детали шаблона POSIX BRE

  • \[ - [ char
  • [^][]* - ноль или более символов, отличных от [ и ]
  • ] - ] char
  • (2 - (2 подстрока
  • [^()]* - 0 или более символов, отличных от ( и )
  • ) - ) char.

См. онлайн grep демо :

s='[Test](202001-test)
BlaBla: [Test2]((202002-test2)'
grep -v '^BlaBla:' <<< "$s" | grep -o '\[[^][]*](2[^()]*)'

Выход:

[Test](202001-test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...