Как использовать grep для сопоставления строки, содержащей [], символы в [] состоят из прописных и строчных букв и + #? - PullRequest
0 голосов
/ 11 мая 2019

Строка выглядит так:

I am a [PHP] engineer, not a [Java] engineer, nor a [C++] engineer, nor a [C#] engineer.

Я написал это выражение, но оно не сработало.

grep -n '\[([a-zA-Z+#]+)\]' filename

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

grep распознает только BREs , если не указан один из флагов -P, -E и -r. А также там не нужны парены.

Вы должны использовать BRE, эквивалентный +

grep -n '\[[a-zA-Z+#]\{1,\}\]' filename

или укажите флаг -E, чтобы он распознал EREs (который действительно менее переносим, ​​чем предыдущий, но легче читается)

grep -E -n '\[[a-zA-Z+#]+\]' filename
1 голос
/ 11 мая 2019

Любая причина не просто использовать это, чтобы найти строки в [...]?

$ grep -Eo '\[[^]]+\]' file
[PHP]
[Java]
[C++]
[C#]

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

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