Искать в grep только строки, начинающиеся с # - PullRequest
0 голосов
/ 25 октября 2018

прежде чем я получу свою задницу, я хочу, чтобы вы знали, что я проверил несколько документов на "grep", и я не смог найти то, что я ищу, или, возможно, мой английский слишком ограничен, чтобы понять.

У меня много документов по уценке.Каждый документ содержит заголовок первого уровня (#), который всегда находится в строке 1.

Я могу искать ^#, и это работает, но как я могу сказать, что grep ищет определенные слова в строке, которая начинаетсяс #?

Я хочу это

grep 'some words' file.markdown

Но также укажите, что строка начинается с #.

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать

grep '^# \([^ ].*\)\{0,1\}some words' file.markdown

Или, используя синтаксис ERE

grep -E '^# ([^ ].*)?some words' file.markdown

Подробности

  • ^ - началостроки
  • # - # char
  • \([^ ].*\)\{0,1\} - необязательная последовательность шаблонов (a \(...\) - это группа захвата в синтаксисе BRE, в ERE этоis (...)) (\{0,1\} - интервальный квантификатор, который повторяет шаблон, который он изменяет 1 или 0 раз):
    • [^ ] - любой символ, кроме пробела
    • .* -любые 0+ символов
  • some words - some words текст.

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

s="# Get me some words here
#some words here I don't want
# some words here I need"
grep '^# \([^ ].*\)\{0,1\}some words' <<< "$s"
# => # Get me some words here
#    # some words here I need
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...