Pergunta

Como coincidir com uma única citação em sed se a expressão está entre aspas simples:

sed -e '...'

Por exemplo necessidade de coincidir com este texto:

'foo'
Foi útil?

Solução

Você pode usar:

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

ou

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

Eu usei nomes de caracteres Unicode. Solidus reverso é mais comumente conhecida como barra invertida.

Neste último caso, você fecha o apóstrofo, então desembolsar-citar o seu apóstrofo com uma barra invertida, em seguida, abrir outra apóstrofe para o resto do texto.

Outras dicas

Como observado nos comentários para a questão, não é realmente sobre o sed, mas a forma de incluir uma citação em uma string em um shell (por exemplo, bash).

Para esclarecer uma resposta anterior, você precisa escapar a citação com uma barra invertida, mas você não pode fazer isso dentro de uma expressão entre aspas simples. A partir da página man bash:

encerrando caracteres entre aspas simples preserva o valor de cada literal caracteres dentro das aspas. Uma única Citação não pode ocorrer entre única citações, mesmo quando precedido por um barra invertida.

Portanto, você precisa para terminar a expressão citada, inserir a citação escapou, e iniciar uma nova expressão citada. remoção de citação do shell não adiciona espaços extras, então na verdade você começa concatenação.

Assim, para responder à pergunta original de como aspas simples a expressão 'foo', você faria algo assim:

sed -e '...'\''foo'\''...'

(onde '...' é o resto da expressão sed).

No geral, por uma questão de legibilidade, você estaria muito melhor alterar as aspas para aspas duplas, se possível:

sed -e "...'foo'..."

[Como exemplo do potencial pesadelo de manutenção da primeira abordagem (aspas simples), nota como sintaxe de StackOverflow destacando cores as aspas, barras invertidas e outros textos - definitivamente não é correto.]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top