Grep подстрока в последнем вхождении одинарных кавычек - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь найти подстроку в строке внутри последнего вхождения одинарных кавычек. Ниже приведена моя строка:

'abc''cde''efg'

Ниже приведена команда, которую я использовал;

echo "'abc''cde''efg'" |rev|grep -m1 -oP "(?<=') .*?(?=')"

Но я не получаю желаемого результата.Я получаю FGE, пока он должен efg.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Если вы перевернули всю строку, вы также должны перевернуть результат после извлечения.

Однако использование регулярного выражения PCRE (включается через опцию P) для вашего случая может упростить задачу:

grep -oP ".*'\K[^']+"

Здесь .*' соответствует последнему (крайнему правому)) в случае ', \K оператор сброса совпадения отбрасывает весь сопоставленный текст и [^']+ вставит в результат 1 или более символов, отличных от '.

Так как не все системы предлагают функциональность PCRE с grep, вы можете также рассмотреть решение awk:

awk -F\'\' 'gsub(/^'"'"'+|'"'"'+$/, "", $0) {print $NF}'

Здесь строка разбивается на поля с подстрокой '' (-F\'\'), затем ведущий / конечный ' удаляются (gsub(/^'"'"'+|'"'"'+$/, "", $0)), а затем печатается последнее поле (print $NF).

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

0 голосов
/ 27 августа 2018

Фрагмент кода:

sed -r "s/.*'(\w+)'$/\1/g"
efg

grep -oP ".*'\K[^']+(?=')"
efg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...