SED \ n e \ em nada

2

As pessoas neste fórum têm sido uma ajuda tremenda! Muito obrigado!

Aqui está minha string

UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/

Estou tentando remover o \ n e o \ da string acima.

Eu tentei:

tr ‘\n\r\’ ‘   ‘

sed 's/\n//g;s;\;;g'

E algumas outras variações, mas não sou bem sucedido em despir tudo. Eu posso pegar o \ mas não o n.

Alguém vê meu erro?

    
por BeMy Friend 25.10.2014 / 00:46

3 respostas

6

Tente:

sed 's/\n//g;s/\//g'

Você deseja remover um literal \ seguido por um literal n . Consequentemente, a barra invertida deve ser escapada na primeira substituição. Por contraste, s/\n//g removeria caracteres de nova linha.

    
por John1024 25.10.2014 / 01:04
2

Use isso com tr para excluir ( -d ) todos \n e \ :

tr -d '\n\' 

Teste:

echo 'foo\nbar\foo' | tr -d '\n\'

Saída:

foobarfoo
    
por Cyrus 25.10.2014 / 08:45
1

Você poderia fazer simplesmente assim. Você não precisa ter outra substituição.

sed 's/\n\|\//g'

OR

sed 's~\n\|\~~g'

Exemplo:

$ var='UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/'
$ sed 's/\n\|\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

Explicação:

Sintaxe do sed:

sed 's/pattern/replace/modifier' file

Comando:

Divida o comando sed acima, como abaixo, para esclarecimento.

sed 's/\n\|\//g'
  • s - pesquisar e substituir.
  • \n\|\ - padrão. \n corresponde a um literal \n OU \| corresponde a um literal \ . Então, primeiro, ele corresponde a todos os \n na string de entrada e, em seguida, corresponde a \
  • // Temos uma peça de substituição vazia, o que significa remover todos os caracteres correspondentes ou substituir os caracteres correspondentes por uma string vazia.
  • g - modificador global. Faz o jogo acontecer globalmente. ou seja, se dois ou mais símbolos \ estiverem presentes em uma única linha, esse sed 's/\//' file removerá apenas o primeiro \ de cada linha. Mas o modificador global g força sed a corresponder a todos os símbolos \ existentes.

Através do GNU sed,

$ sed -r 's/\n|\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

Através do Perl,

$ perl -pe 's/\n?//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/
    
por Avinash Raj 25.10.2014 / 09:58