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?


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 '<>,'

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'


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.