Как получить точную строку с косой чертой в нем? - PullRequest
3 голосов
/ 20 июня 2019

Я использую macOS.

Есть следующие строки:

/ супермен

/ superman1

/ супермен / денщик

/ superman2 / денщик

/ супермен / Wonderwoman

/ superman3 / Wonderwoman

/ Batman / Superman

/ Batman / superman1

/ Wonderwoman / супермен

/ Wonderwoman / superman2

Я хочу использовать только выделенные слова.

Я полагал, что выполнение grep -wr 'superman / | / superman' даст все из них, но это даст только /superman.

Есть идеи, как это сделать?

Ответы [ 2 ]

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

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

grep -E '(^|/)superman($|/)' file

См. онлайн-демонстрацию :

s="/superman
/superman1
/superman/batman
/superman2/batman
/superman/wonderwoman
/superman3/wonderwoman
/batman/superman
/batman/superman1
/wonderwoman/superman
/wonderwoman/superman2"
grep -E '(^|/)superman($|/)' <<< "$s"

Вывод:

/superman
/superman/batman
/superman/wonderwoman
/batman/superman
/wonderwoman/superman

Шаблон соответствует

  • (^|/) - начало строки или косой черты
  • superman - слово
  • ($|/) - конец строки или косой черты.
1 голос
/ 20 июня 2019
grep '/superman\>'

\> - это «маркер конца слова», а для «superman3» конец слова - , а не после «man»


Проблемы с вашим -w решением:

  1. | является не особенным в basic регулярном выражении. Вам нужно либо убежать от него, либо использовать grep -E
  2. прочитайте справочную страницу о том, как -w работает:

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

    В случае, если линия /batman/superman,

    • шаблон superman/ не появляется
    • шаблон /superman - это:
      • в конце строки, что нормально, но
      • предшествует символ "n", который является составляющим слово словом .

grep -w superman даст вам лучшие результаты, или если вам нужен супермен, которому предшествует косая черта, тогда мой оригинальный ответ сработает.

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