Jawaban:
Anda bisa mengganti backslash dengan spasi seperti yang Anda tunjukkan dalam hasil contoh:
sed 's/\\/ /g'
atau Anda dapat menghapusnya seperti yang Anda tunjukkan dalam kode Anda:
sed 's/\\//g'
Ada kemungkinan masalah dengan melarikan diri backslash untuk membatalkan arti khusus. Backslash adalah karakter khusus yang digunakan untuk melarikan diri baik dalam shell maupun ekspresi reguler.
Perintah yang Anda ketikkan ke baris perintah shell atau skrip pertama kali diproses oleh shell yang mengartikan makna khusus karakter dan pelolosannya. Hasilnya kemudian diteruskan ke perintah yang akan dieksekusi (seperti sed
) yang melakukan interpretasi karakternya sendiri. Ketika Anda membangun sebuah perintah, prosedur mentalnya adalah sebaliknya: pertama-tama tambahkan escaping untuk regex kemudian tambahkan escaping untuk shell.
Dalam sebuah regex (input ke perintah seperti sed
, grep
dll.) Backslash dapat lolos dengan backslash seperti ini: \\
dan Anda juga dapat menggunakan ekspresi set [\]
seperti yang Anda gunakan karena ada backslash kehilangan arti khusus.
Dalam sebuah shell (seperti bash
) Anda dapat menghindari backslash dengan backslash. Jadi alih-alih \
menulis \\
. Menutup string antara tanda kutip ganda "
membuat perilaku backslash lebih rumit <1> tetapi double backslash masih akan menghasilkan backslash tunggal. Menutup string di antara tanda kutip tunggal '
membuat setiap karakter diperlakukan secara harfiah kecuali '
.
Jika Anda ingin menggunakan tanda kutip ganda , Anda dapat menggunakan salah satu dari berikut ini:
sed "s/\\\\//g"
- melarikan diri \
dengan \
di shell, dan melarikan diri setiap \
di regex lagi. Faktanya, tanda kutip ganda tidak diperlukan dalam kasus ini karena setiap karakter khusus lolos dengan benar.
sed "s/[\\]//g"
- Melarikan diri di shell dengan backslash \
dan di regex gunakan satu set [
]
.
sed "s/[\]//g"
- Ya, contoh Anda harus bekerja di lingkungan yang sesuai dengan POSIX! Antara tanda kutip ganda \
mewakili dirinya sendiri kecuali mendahului karakter khusus dalam konteks tanda kutip ganda: $`"\
atau baris baru. Sepertinya dalam kasus Anda shell atau sed
tidak mengikuti standar POSIX.
Dengan tanda kutip tunggal Anda juga dapat menggunakan string seperti yang Anda gunakan atau dengan cara yang lebih pendek:
sed 's/[\]//g'
sed 's/\\//g'
Dalam awk, saya akan melakukan ini,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Tempatkan \
sebelumnya \
seperti yang Anda lakukan dengan sebagian besar karakter khusus.
g
bendera karena alasan yang tidak diketahui. Ini mengubah perilaku perintah tetapi perubahan seperti itu tidak diminta dalam pertanyaan. Kalau tidak, balasan Anda tidak membawa sesuatu yang baru dibandingkan dengan balasan sebelumnya.
sed
(atau mungkin Anda menjalankan perintah itu dari shell non-POSIX?). Anda tidak perlused
meskipun,tr
cukup:tr -d '\\' < P
.