Извлечь текст между двумя специальными символами - PullRequest
0 голосов
/ 18 апреля 2019

Попытка извлечь текст между специальными символами "\ и \" - sed

Ex: "\hell@#$\"},

ожидаемый вывод: hell@#$

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Вы можете сделать это довольно легко с помощью группы захвата и обратной ссылки с основными регулярными выражениями:

sed 's/^["][\]\([^\]*\).*$/\1/'

Объяснение

  • Нормальная замена sed 's/find/replace/, где
  • find - это ^["][\] двойная кавычка и \ перед началом захвата \(...\), который содержит [^\]* (ноль или более символов, а не \), закрытие захвата \) и затем .*$ остаток строки;
  • replace - это \1 (первая обратная ссылка), содержащая текст, захваченный между \(...\).

( примечание: , если ваш "\ не начинает строку, удалите первый '^' якорь)

* +1032 * Пример * +1034 *

$ echo '"\hell@#$\"},' | sed 's/^["][\]\([^\]*\).*$/\1/'
hell@#$

Посмотрите вещи и дайте мне знать, если у вас есть вопросы.

0 голосов
/ 21 апреля 2019

Это может работать для вас (GNU sed):

sed -nE '/"\\[^\\]*\\+([^\\"][^\\]*\\+)*"/{s/"\\/\n/;s/.*\n//;s/\\"/\n/;P;D}' file

Решение состоит из двух частей:

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

Во-вторых, как только пара символов существует, текст между ними должен быть извлечен кусочком еды.

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