Saya menjalankan perintah ini dalam bash shell di Ubuntu 12.04.1 LTS. Saya mencoba untuk menghapus kedua karakter [
dan ]
dalam satu gerakan, yaitu tanpa harus menyalurkan untuk kedua kalinya.
Saya tahu tanda kurung siku memiliki arti khusus dalam regex jadi saya melarikan diri dengan menambahkan backslash. Hasil yang saya harapkan hanyalah string 123
tetapi tanda kurung tetap dan saya ingin tahu mengapa!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
str='[123]'; str1=${str/\[/}; str2=${str1/\]}; echo $str2
Jawaban:
Ini mudah, jika Anda mengikuti manual dengan hati-hati: semua anggota di dalam kelas karakter kehilangan makna khusus (dengan beberapa pengecualian). Dan] kehilangan arti khusus jika ditempatkan pertama dalam daftar. Mencoba:
Ini mengatakan:
]
dan[
//
,g
.Sekali lagi,
]
harus menjadi yang pertama di kelas setiap kali dimasukkan.sumber
Saya tidak yakin mengapa itu tidak berhasil tetapi ini berhasil:
atau ini:
Anda juga dapat mencoba pendekatan yang berbeda dan mencocokkan string di dalam tanda kurung (dengan asumsi string dapat dicocokkan dengan mudah dan tidak ditentukan oleh tanda kurung):
Saya mengalami masalah yang sama dengan regex asli Anda menggunakan
grep
jadi saya curiga ini bukan hanyased
hal.Anehnya, ini menghasilkan hasil yang berbeda tetapi salah satunya cocok dengan yang Anda inginkan:
Menerapkan ini ke dokumen asli Anda
sed
(dan menambahkan/g
pengubah sehingga menghapus kedua tanda kurung):sumber
tr
:echo '[123]' | tr -d '[]'
- menghindari kebingungan regexp tentang melarikan diri.tr
hanya dapat menerjemahkan satu karakter maks pada satu waktu, tetapi saya salah. Terima kasih!Untuk menghapus semuanya sebelum dan sesudah tanda kurung:
Jika data Anda seperti ini selalu berarti dimulai dan diakhiri dengan tanda kurung:
sumber
Jika Anda memiliki string yang lebih kompleks seperti 'abcdef [123] ghijk', Anda juga dapat menggunakan perintah bash internal 'cut' untuk mengekstrak teks hanya di antara tanda kurung:
sumber
Anda dapat menghindari braket pembuka menggunakan
\[
. Untuk braket penutup, gunakan[]]
.sumber