У меня есть ряд строк, которые я хочу извлечь:
hello.this_is("bla bla bla")
some random text
hello.this_is('hello hello')
other stuff
Что мне нужно получить (из многих файлов, но здесь это не важно), это содержимое между hello.this_is(
и )
, поэтому мой желаемый вывод:
bla bla bla
hello hello
Как видите, текст в скобках может быть заключен в двойные или одинарные кавычки.
Если бы это были только одинарные кавычки, я бы использовалоглянуться назад и заглянуть в будущее так:
grep -Po "(?<=hello.this_is\(').*(?=')" file
# ^ ^
# returns ---> hello hello
Аналогично, чтобы получить строки из двойных кавычек, я бы сказал:
grep -Po '(?<=hello.this_is\(").*(?=")' file
# ^ ^
# returns ---> bla bla bla
Однако я хочу сопоставить оба случая, поэтомуон получает как одинарные, так и двойные кавычки.Я попытался использовать $''
для выхода, но не смог заставить его работать:
grep -Po '(?<=hello.this_is\($'["\']').*(?=$'["\']')' file
# ^^^^^^^^ ^^^^^^^^
Я, конечно, могу использовать номер ASCII и сказать:
grep -Po '(?<=hello.this_is\([\047\042]).*' file
, но я бы хотелиспользовать кавычки и одинарные кавычки, так как 047
и 042
не так характерны для меня, как одинарные и двойные кавычки.