grep с регулярным выражением для соответствия строк, начинающихся ровно с трех строчных букв - PullRequest
1 голос
/ 24 апреля 2020

Так что обычно я довольно хорошо разбираюсь в использовании grep с регулярными выражениями, но я одержим этой простой вещью. У меня есть следующий текстовый файл с именем first-para.txt (показан ниже), и я хочу найти все строки, начинающиеся ровно с трех строчных символов «^ [az] {3}», но не могу выполнить шов, чтобы он работал.

It was the best of times,
it was the worst of times,
it was the age of wisdom,
it was the age of foolishness,
it was the epoch of belief,
it was the epoch of incredulity,
it was the season of Light,
it was the season of Darkness,
it was the spring of hope,
it was the winter of despair,
we had everything before us,
we had nothing before us,
we were all going direct to Heaven,
we were all going direct the other way--
in short, the period was so far like the present period, that some of
its noisiest authorities insisted on its being received, for good or for
evil, in the superlative degree of comparison only.

И попытка этого дает мне все строки, начинающиеся с трех или более строчных букв, но я не понимаю, почему я получаю не только одну строку, которая на самом деле начинается с трех символов, ее .... '

$ grep '^[a-z]\{3\}' first-paragraph.txt 
its noisiest authorities insisted on its being received, for good or for
evil, in the superlative degree of comparison only.
$ grep '^[a-z]\{3\}$' first-paragraph.txt # no lines
$ grep '^([a-z])\{3\}' first-paragraph.txt # no lines

1 Ответ

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

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

grep '^[a-z]\{3\}\b' file # \b is a word boundary

См. this grep demo .

Или, если ваш grep не поддерживает конструкцию границы слова, вы может использовать

grep -e '^[a-z]\{3\}$' -e '^[a-z]\{3\}[^[:alnum:]]' file

, где первый шаблон будет соответствовать только 3-буквенным строкам, а второй - только тем, где четвертый символ не является алфавитным символом c.

См. this grep demo .

Вы можете заменить [^[:alnum:]] на [^[:alpha:]], если вы хотите, чтобы любой символ, кроме буквы, появлялся внутри «слово» (т.е. если вы хотите получить совпадение для cat123). Или вы можете заменить [:alnum:] на [:space:], чтобы обозначить только конец слова, когда оно заканчивается пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...