“удар: синтаксическая ошибка, почти неожиданная')” в Linux Shell

Я ищу строку в кавычках, где слово, Linux происходит где-нибудь между круглыми скобками, которые находятся где-нибудь в кавычках. Я должен использовать регулярное выражение, чтобы сделать это. Я обязан делать это в ОС Linux (использующий Виртуальный Терминал Поля). Я использовал следующий regex:

 egrep "\"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?\"" [FILE]

Но проблема, я добираюсь

bash: syntax error near unexpected token '("

каждый раз. Какова может быть проблема? Я попробовал этот regex в "http://regexr.com/", он хорошо работает, нет ничего неправильно с regex. Но оболочка Linux всегда производит ту же проблему... Я использовал "\" перед круглыми скобками, потому что они - метасимволы. То же самое я сделал перед двойными кавычками... Но это не работает. Кто-либо мог помочь мне?

2
задан 7 September 2016 в 12:26

2 ответа

Замените первое и последнюю двойную кавычку " с одинарной кавычкой '.

egrep '\"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?\"' [FILE]
3
ответ дан 2 December 2019 в 01:32

Проблемой являются незавершенные двойные кавычки в выражении, например, вокруг этой части "]*)?\(([^]". Если Вы хотите передать литерал ", включая внутренние двойные кавычки или () или [], затем необходимо заключить кавычки в кавычки! Вы могли сделать

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)

5
ответ дан 2 December 2019 в 01:32

Другие вопросы по тегам:

Похожие вопросы: