Bagaimana saya bisa meletakkan backslash sebelum setiap ruang, lebih disukai dengan menggunakan tr
atau sed
perintah?
Ini skrip saya:
#!/bin/bash
line="hello bye"
echo $line | tr ' ' "\\\ "
Ini seharusnya menggantikan spasi dengan backslash diikuti oleh spasi, tapi itu hanya mengganti spasi dengan backslash dan bukan backlash + spasi.
Ini adalah output yang saya dapatkan:
hello\bye
Output yang diharapkan:
hello\ bye
tr x ' '
, di manax
karakter yang ingin Anda ganti?Jawaban:
tr
tidak dapat melakukan banyak karakter. Gunakan salah satu dari ini sebagai gantinya:sed
atau
Perl
atau
Perl juga memiliki fungsi bagus yang disebut
quotemeta
yang dapat melarikan diri dari semua hal aneh dalam sebuah string:Di atas akan dicetak
Anda juga dapat menggunakan
printf
dan%q
:Jadi, Anda bisa melakukannya
Perhatikan bahwa ini, seperti Perl,
quotemeta
akan keluar dari semua karakter khusus, bukan hanya spasi.Jika Anda memiliki baris dalam variabel, Anda bisa langsung melakukannya di bash:
sumber
printf
builtin memiliki fungsi yang mirip denganquotemeta
-printf '%q\n' "$line"
harus melakukannya IIRC.Ada yang
AWK
hilang dalam daftar semua solusi yang mungkin :)sumber