bagaimana cara echo $ something >> file.txt tanpa carriage return?

81

Ketika saya echo $something >> file.txt, baris baru akan ditambahkan ke file.

Bagaimana jika saya ingin menambahkan tanpa baris baru?

onemach
sumber
3
Hati-hati melakukannya echo $something, perilakunya tergantung pada IFSvariabel, dan Anda bisa berakhir dengan karakter yang hilang. Anda dapat mencoba yang berikut ini: var="hello world"; echo $var(dua jarak antara halo dan dunia) atau var="hello world"; IFS='l'; echo $varatau var="-e hello \\n world"; echo $var. Untuk mengatasinya, letakkan tanda kutip ganda di sekitar variabel seperti ini:, echo "$var"atau gunakan printf.
jfg956

Jawaban:

96

Itu untuk apa echo -n.

Ignacio Vazquez-Abrams
sumber
4
Apakah ada yang setara untuk cat? (mis. ketika Anda memiliki file something.txtdaripada variabel $something)
cboettig
1
@cboettig: Tidak. Gunakan alat lain untuk mencetak semuanya kecuali baris terakhir.
Ignacio Vazquez-Abrams
@cboettig, cat tidak menambahkan apapun ke output secara default, jadi tidak perlu param '-n' untuk cat. misal, jika file Anda tidak memiliki akhiran baris di baris terakhir, maka prompt shell Anda akan dicetak tepat setelah karakter terakhir dari file dan bukan di baris baru
Rondo
41

printfsangat fleksibel dan lebih portabel daripada echo. Seperti implementasi C / Perl / etc, jika Anda tidak mengakhiri string format dengan \nmaka tidak ada baris baru yang dicetak:

printf "%s" "$something" >> file.txt
glenn jackman
sumber
7

Jika Anda menggunakan output perintah, Anda dapat menggunakan xargs dalam kombinasi dengan gema

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

tr adalah alternatif lain.

Jika Anda menggunakan echoinput Anda, Anda bisa pergi yang mana tr -d '\n'.

Teknik ini juga berfungsi ketika memipihkan output dari perintah lain (hanya dengan satu baris output). Selain itu, jika Anda tidak tahu apakah file memiliki ujung UNIX atau DOS yang dapat Anda gunakan tr -d '\n\r'.

Berikut adalah beberapa tes yang menunjukkan bahwa ini berhasil.

Baris baru termasuk:

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

UNIX baris baru:

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

Gaya DOS:

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

Diuji dengan BSD trdan GNU tr.

Nic Doye
sumber