como faço para ecoar $ something >> file.txt sem retorno de carro?


81

Quando eu echo $something >> file.txt, uma nova linha será anexada ao arquivo.

E se eu quiser acrescentar sem uma nova linha?


3
Tenha cuidado echo $something, o comportamento dele depende da IFSvariável e você pode acabar com o caráter de desaparecimento. Você pode tentar o seguinte: var="hello world"; echo $var(dois espaços entre olá e mundo) ou var="hello world"; IFS='l'; echo $varou var="-e hello \\n world"; echo $var. Para resolver isso, coloque aspas duplas em torno da variável assim:, echo "$var"ou use printf.
Jfg956

Respostas:


96

É para isso que echo -nserve.


4
Existe um equivalente para cat? (por exemplo, quando você tem um arquivo something.txtem vez de uma variável $something)
cboettig

11
@cboettig: Não. Use uma ferramenta diferente para imprimir tudo, menos a nova linha final.
Ignacio Vazquez-Abrams

@cboettig, cat não adiciona nada à saída por padrão, então não há necessidade de um parâmetro '-n' para cat. por exemplo, se o arquivo não tem uma linha termina na última linha, em seguida, o prompt shell será impresso logo após o último caractere do arquivo e não em uma nova linha
Rondo

41

printfé muito flexível e mais portátil que echo. Como nas implementações C / Perl / etc, se você não finalizar a sequência de formatação com \nnenhuma nova linha será impressa:

printf "%s" "$something" >> file.txt

7

Se você estiver usando a saída do comando, poderá usar xargs em combinação com echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr é outra alternativa.

Se você estiver usando echocomo sua entrada, pode se safar de qual tr -d '\n'.

Essa técnica também funciona ao canalizar a saída de outros comandos (com apenas uma única linha de saída). Além disso, se você não sabe se os arquivos têm terminações de linha UNIX ou DOS, você pode usar tr -d '\n\r'.

Aqui estão alguns testes mostrando que isso funciona.

Nova linha incluída:

something='0123456789' ; echo ${something} | wc -c
11

Nova linha do UNIX:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

Estilo DOS:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

Testado com BSD tre GNU tr.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.