Я ищу строку в кавычках, где слово, Linux происходит где-нибудь между круглыми скобками, которые находятся где-нибудь в кавычках. Я должен использовать регулярное выражение, чтобы сделать это. Я обязан делать это в ОС Linux (использующий Виртуальный Терминал Поля). Я использовал следующий regex:
egrep "\"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?\"" [FILE]
Но проблема, я добираюсь
bash: syntax error near unexpected token '("
каждый раз. Какова может быть проблема? Я попробовал этот regex в "http://regexr.com/", он хорошо работает, нет ничего неправильно с regex. Но оболочка Linux всегда производит ту же проблему... Я использовал "\" перед круглыми скобками, потому что они - метасимволы. То же самое я сделал перед двойными кавычками... Но это не работает. Кто-либо мог помочь мне?
Замените первое и последнюю двойную кавычку "
с одинарной кавычкой '
.
egrep '\"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?\"' [FILE]
Проблемой являются незавершенные двойные кавычки в выражении, например, вокруг этой части "]*)?\(([^]"
. Если Вы хотите передать литерал "
, включая внутренние двойные кавычки или ()
или []
, затем необходимо заключить кавычки в кавычки! Вы могли сделать
egrep "\"([^\"]*)?\(([^\"]*)?Linux([^\"]*)?\)([^\"]*)?\"" FILE
Но менее ужасный путь состоит в том, чтобы заключить в кавычки целому выражению с одинарными кавычками и в целом всегда сильной (единственной) кавычке Ваш regex, таким образом, оболочка не делает ничего странного к нему, прежде чем это будет передано как аргумент egrep
или безотносительно программы Вы используете:
egrep '"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?"' FILE
(теперь Вы не должны выходить из двойных кавычек на внешней стороне также, но Вам нужны другие обратные косые черты для создания литерала круглых скобок (в ДО)),
если Вы не хотите остальную часть строки, добавить -o
(соответствуйте только), также
egrep -o '"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?"' FILE
Вы не дали пример, таким образом, я сделал глупый..., вот, прежде:
what
where is "the (lost Linux that I want) to find somewhere" in this file
and some junk
we don't want this thing "here where Linux is (not in brackets)"
и после:
"the (lost Linux that I want) to find somewhere"
(NB: с помощью GNU grep
можно сделать grep -E
вместо использования egrep
)