O problema são as aspas duplas sem escape dentro da expressão, por exemplo, em torno desta parte "]*)?\(([^]"
. Se você quiser passar literal "
, incluindo entre aspas duplas ou ()
ou []
, então você deve citar as aspas! Você poderia fazer
egrep "\"([^\"]*)?\(([^\"]*)?Linux([^\"]*)?\)([^\"]*)?\"" FILE
Mas uma maneira menos feia é citar toda a expressão com aspas simples , e em geral sempre strong (simples) citar sua regex para que a shell não faça nada de estranho antes de ser passada como um argumento para egrep
ou qualquer programa que você esteja usando:
egrep '"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?"' FILE
(agora você não precisa escapar as aspas duplas do lado de fora também, mas você precisa das outras barras invertidas para fazer o literal de parênteses (em ERE))
se você não quiser o resto da linha, adicione -o
(somente correspondência) também
egrep -o '"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?"' FILE
Você não deu um exemplo, então eu fiz um bobo ... aqui está antes:
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)"
e depois:
"the (lost Linux that I want) to find somewhere"
(NB: usando o GNU grep
você pode fazer grep -E
ao invés de usar egrep
)