Como posso passar a saída do comando sed para a variável sem perder o formato de dados

1

Eu tenho um arquivo com cinco linhas com dados separados por pipe.Usando o comando sed Estou removendo o pipe Somente no final de cada linha. Mas quando eu estou passando abaixo da saída do comando para uma variável, os dados perdem o formato e vêm em uma única linha.

Como podemos passar os dados abaixo para uma variável mantendo as cinco linhas intactas

sed 's/.$//' $input|sort
    
por rohan 06.04.2016 / 09:25

1 resposta

1

Eu não posso ter 100% de certeza desde que você não tenha nos mostrado o que está fazendo, mas eu estou supondo que você simplesmente não está citando suas variáveis. Por exemplo, dado este arquivo:

$ cat file
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|

Se você executar seu comando e salvar a saída em uma variável, as novas linhas serão salvas. No entanto, se eles são impressos ou não, depende de como você imprime a variável:

$ var=$(sed 's/.$//' file | sort)
$ echo $var       ## bad
foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz
$ echo "$var"     ## good
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz

Quando você usa uma variável sem aspas, invoca o operador split + glob que dividirá a variável em caracteres na variável $IFS . Por padrão, esse é o espaço, a nova linha e a guia:

$ printf '%s' "$IFS" | od -c
0000000      \t  \n
0000003

Citando a variável protege de split + glob, que é uma das razões pelas quais você deve sempre citar suas variáveis . Para mais detalhes sobre o porquê, consulte Implicações de segurança de esquecer de citar uma variável em shells bash / POSIX .

    
por 06.04.2016 / 10:03

Tags