Obter cadeia entre duas cadeias de caracteres

0

Eu preciso obter o texto interno desta string [%L10n.msg('foo')%] para o texto entre [%L10n.msg(' e ')%] , então neste exemplo eu devo obter foo .

Encontrei muitos exemplos, mas nenhum deles funcionou, tentei algo assim:

echo "[%L10n.msg('foo')%]" | sed -n -e '/[%L10n.msg(\'/,/\')%]/p'

Mas recebo erro

bash: syntax error near unexpected token ')'

ATUALIZAÇÃO: Imagine que minha string pode estar dentro desse strig:

Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]

Arquivo testado:

Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]
fefe
          <a class="w3-bar-item w3-button" href='/html/html_examples.asp'>HTML Examples</a>

          <a class="w3-bar-item w3-button" href='/html/html_exercises.asp'>HTML Exercises</a>

fefrheerghirlg wgwa g [%L10n.msg('foo')%]


<>"
    
por tomsk 14.11.2018 / 17:56

1 resposta

1

Que tal

$ echo "[%L10n.msg('foo')%]" | sed "s/\[%L10n.msg('//; s/')%]//"
foo

ou, com sua nova amostra de entrada,

echo "Some ' very [%% ]long ' text [%L10n.msg('foo')%] with lot of [%characters%]" | sed "s/^.*\[%L10n.msg('//; s/')%].*$//"
foo

ou, com a entrada alterada pela segunda vez (lê Arquivo testado agora), tente

sed -n "/^.*\[%L10n.msg('/ {s///; s/')%].*$//;p}" file
foo
foo
    
por 14.11.2018 / 18:09