Menggunakan sed untuk menyingkirkan karakter <>,

18

Saya memiliki file dengan baris sebagai berikut:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

Saya ingin menggunakan sed untuk menghapus karakter < ,dan >dari setiap baris

Saya mencoba menggunakan sed 's/<>,//g'tetapi tidak berhasil (tidak mengubah apa pun). Apakah saya perlu melarikan diri karakter khusus ini. Apakah mungkin untuk menghapus beberapa karakter menggunakan satu sedperintah?

Amelio Vazquez-Reina
sumber
2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul
3
@srikanthradix: Itu tidak menghapus karakter-karakter itu, menggantikannya dengan spasi. Anda ingin tr -d '<>,' ''(seperti dalam jawaban Chris Down).
Keith Thompson
1
@KeithThompson:, tr -d '<>,'tanpa '' pada akhirnya, bukan?
pengguna tidak dikenal
@userunknown: Ya, terima kasih atas koreksinya.
Keith Thompson

Jawaban:

43

Dengan sed:

sed 's|[<>,]||g'

Dengan tr:

tr -d '<>,'
Chris Down
sumber
2
Benar, tapi saya pribadi menganggap penggunaan |sebagai pembatas sedikit membingungkan. sed 's/[<>]//g'sedikit lebih mudah dibaca.
Keith Thompson
@KeithThompson Saya menggunakannya untuk kepraktisan. Saya menemukan diri saya berhadapan dengan literal |(dan karenanya harus menghindarinya) jauh lebih sedikit daripada saya harus berurusan dengan literal /.
Chris Down
2
Poin yang adil. Di sisi lain, |juga sering merupakan meta-karakter, yang digunakan untuk pergantian dalam beberapa sintaks regexp (meskipun seddalam kebutuhan khusus \|untuk itu). Secara pribadi, jika saya perlu berurusan dengan /karakter literal , saya biasanya menggunakan ,sebagai pembatas.
Keith Thompson
1
Selain dari situasi pribadi / spesifik yang disebutkan di atas, ada satu perbedaan sintaksis intrinsik ketika menggunakan pembatas non-standar. Non-/ pembatas pertama harus diloloskan untuk setiap ekspresi rentang sed , misalnya:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O
8

Coba yang ini: sed 's/[<>,]//g'

Iman
sumber
Untuk apakah bilah vertikal di sana?
Paul Tomblin
sed 's / [<|> |] / / g' - s melakukan pencarian; si / adalah pembatas; tanda kurung [] marilah kita mencari lebih dari satu hal; itu | bilah vertikal adalah logis atau dan g adalah untuk mencari secara global atau seluruh file.
Iman
3
Anda tidak perlu (atau, memang, menginginkan) bagian |dalam []. gunakan 's/[<>,]//g'.
Kevin
2
Anda tidak perlu bilah vertikal. Apa pun yang ada dalam tanda kurung siku dicari sebagai daftar. sed 's/[<>,]/ /g'akan bekerja dengan baik, kecuali ide Anda akan menghapus bilah vertikal juga.
Paul Tomblin
Untuk menambahkan: mungkin Anda ingin melihat ekspresi reguler, ini adalah salah satu contoh termudah, tetapi sudah menunjukkan kekuatannya.
Bernhard