Katakanlah saya memiliki variabel shell $string
yang menampung beberapa teks dengan beberapa baris baru, misalnya:
string="this
is
a test"
Saya ingin mengubah string ini menjadi string baru di new_string
mana semua jeda baris dikonversi menjadi spasi:
new_string="this is a test"
Saya mencoba:
print $string | sed 's/\n/ /g'
tapi itu tidak berhasil
Saya juga bertanya-tanya apakah ada cara melakukan ini menggunakan perl -0777 's/\n/ /g'
atau mungkin perintah tr
?
Jawaban:
Jika Anda hanya ingin menghapus baris baru dalam string, Anda tidak perlu menggunakan
sed
. Anda bisa menggunakan sajaseperti yang orang lain tunjukkan.
Tetapi jika Anda ingin mengonversi baris baru menjadi spasi di file menggunakan
sed
, maka Anda dapat menggunakan:atau bahkan
awk
:sumber
sponge
adalah utilitas yang berguna untuk menimpa file input. Itu adalah bagian dari paketmoreutils
... mis.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Anda dapat mencoba menggunakan
tr
sebagai gantinya:sumber
Namun pilihan lain adalah menggunakan
xargs
(yang, di samping itu, memeras banyak ruang putih):sumber
Echo mengabaikan ruang putih, jadi itu seharusnya bekerja:
sumber
Jika Anda sudah memiliki string sebagai variabel bash, sebagai contoh menunjukkan Anda, itu adalah sia-sia dan boros sumber daya (dan lebih mengetik) untuk memanggil
sed
,awk
,printf
, dll ... Anda dapat hanya menggunakan variabel ekspansi pesta :Anda bahkan tidak perlu menetapkan ulang. Anda dapat menggunakan ekspansi apa adanya, dan biarkan
$string
tidak berubah.sumber
Anda dapat mencoba perintah awk ini juga,
Contoh:
sumber
Ini mengonversi urutan apa pun dari satu atau beberapa
\n
karakter baris baru yang terjadi dalam variabel shell$string
menjadi satu<space>
.sumber
Anda dapat menggunakan perintah sed sederhana
sumber