<> Karakterlerinden kurtulmak için sed komutunu kullanma,


18

Aşağıdaki gibi satırları olan bir dosya var:

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

Karakterleri kaldırmak < ,ve >her satırdan sed kullanmak istiyorum

Kullanmayı denedim sed 's/<>,//g'ama işe yaramadı (hiçbir şey değiştirmedi). Bu özel karakterlerden kaçmam gerekiyor mu? Tek bir sedkomut kullanarak birden fazla karakteri silmek mümkün müdür ?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234] -EDITED Thanks to Paul

3
@srikanthradix: Bu karakterleri kaldırmaz, boşluklarla değiştirir. Siz isteyin tr -d '<>,' ''(Chris Down'un cevabında olduğu gibi).
Keith Thompson

1
@KeithThompson: tr -d '<>,'sonunda '' olmadan, değil mi?
kullanıcı bilinmiyor

@userunknown: Evet, düzeltme için teşekkürler.
Keith Thompson

Yanıtlar:


43

İle sed:

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

İle tr:

tr -d '<>,'

2
Doğru, ama kişisel |olarak sınırlayıcı olarak kullanımını biraz kafa karıştırıcı buluyorum . sed 's/[<>]//g'okumak biraz daha kolay.
Keith Thompson

@KeithThompson Pratiklik için kullanıyorum. Kendimi gerçek ile uğraştığımı |(ve dolayısıyla bundan kaçmak zorunda kaldığımı) gerçekle uğraşmaktan çok daha az buldum /.
Chris Down

2
Adil bir nokta. Öte yandan, bazı regexp sözdizimlerinde ( özellikle bunun için gerekli olsa da ) |dönüşüm için kullanılan bir meta karakterdir . Şahsen, gerçek karakterlerle uğraşmam gerekirse , genellikle sınırlayıcı olarak kullanırım . sed\|/,
Keith Thompson

1
Yukarıda belirtilen kişisel / özel durumların yanı sıra, standart olmayan bir sınırlayıcı kullanıldığında bir içsel sözdizimi farkı vardır. Her sed aralığı ifadesi için ilk sınırlayıcı / sınırlayıcıdan kaçınılmalıdır , örneğin:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

Bunu dene: sed 's/[<>,]//g'


Orada dikey çubuklar ne için?
Paul Tomblin

sed 's / [<|> |] / / g' - Arama yapar; /, sınırlayıcıdır; [] parantezleri birden fazla şeyi aramamıza izin verir; | dikey çubuk mantıklıdır veya g global olarak veya tüm dosyayı aramak içindir.
Iman

3
Sen (aslında, istiyorum, ya) gerekmez |içinde s []. kullanın 's/[<>,]//g'.
Kevin

2
Dikey bir çubuğa ihtiyacınız yok. Köşeli parantez içindeki her şey bir liste olarak aranır. sed 's/[<>,]/ /g'tam olarak iyi çalışacaktı, ancak fikriniz dikey çubukları da kaldıracak.
Paul Tomblin

Eklemek için: belki düzenli ifadelere bakmak istersiniz, bu en kolay örneklerden biridir, ancak zaten gücü gösterir.
Bernhard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.