Comando Sed-e 'Unterminated'

1

Estou tentando escapar de todas as barras invertidas de algum texto gerado pelo figlet. Aqui está o que eu tenho até agora.

figlet -f $font -t "Foo Bar" | sed -e "s|\|\\|g"

Isso não funciona por algum motivo, mas isso acontece.

figlet -f $font -t "Foo Bar" | sed -e "s| |X|g"

Estou entendendo mal como o sed funciona aqui? Eu não consegui encontrar posts semelhantes sobre isso também.

    
por Amlesh Sivanantham 24.08.2018 / 00:27

1 resposta

1

As aspas duplas não protegem as barras invertidas que estão dentro do sed -e "s|\|\\|g" das tentativas do shell de analisá-las. Se você usar um exemplo mais simples, poderá ver isso com mais facilidade:

$ echo 'blah\blah'| sed -e "s|\|blah|g"
sed: -e expression #1, char 10: unterminated 's' command

$ echo 'blah\blah'| sed -e 's|\|blah|g'
blahblahblah

Se você quiser usar o primeiro formulário do seu sed , precisará alterná-lo para aspas simples, em vez de para o dobro.

$ figlet -t "Foo Bar" | sed -e 's|\|\\|g'
 _____             ____
|  ___|__   ___   | __ )  __ _ _ __
| |_ / _ \ / _ \  |  _ \ / _' | '__|
|  _| (_) | (_) | | |_) | (_| | |
|_|  \___/ \___/  |____/ \__,_|_|

Se você tiver que usar aspas duplas, precisará de mais barras invertidas para escapar do shell e sed :

$ figlet -t "Foo Bar" | sed -e "s|\\|\\\\|g"
 _____             ____
|  ___|__   ___   | __ )  __ _ _ __
| |_ / _ \ / _ \  |  _ \ / _' | '__|
|  _| (_) | (_) | | |_) | (_| | |
|_|  \___/ \___/  |____/ \__,_|_|
    
por 24.08.2018 / 00:56

Tags