соответствие регулярного выражения точному вхождению специального символа - PullRequest
1 голос
/ 16 июня 2019

Файл:

cat test.txt

100 ***

10 ** // target

Grep:

grep -E '\*{2}' test.txt

100 ***

10 ** 

Разве {m} не используется для точного определения номера совпадения?

Какполучить * с точным 2 вхождением?

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

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

grep -E '(^|[^*])\*{2}($|[^*])' test.txt

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

test="100 ***
10 ** // target"
grep -E '(^|[^*])\*{2}($|[^*])' <<< "$test"
# => 10 ** // target

Подробнее

  • (^|[^*]) - начало строки или любого символа, но *
  • \*{2} - две звездочки
  • ($|[^*]) - конец строки или любой символ, но *.

Изменение с границами пробелов

Если вам нужно найти только одно слово между пробелами, используйте

grep -E '(^|[[:space:]])\*{2}($|[[:space:]])' test.txt
0 голосов
/ 17 июня 2019

Простое регулярное выражение basic также будет работать с явным указанием "**", не окруженным '*'.Например:

$ grep '^[^*]*[*][*][^*]*$' test.txt
10 **

Это будет соответствовать строке, содержащей [*][*] в любом месте строки, не окруженной другим '*'.

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