2009-04-11 16 views
9

Yaklaşık 500 karakterden oluşan bir satırdan okuyorum. Bu dizgiyi bir şeyle değiştirmek yerine, nasıl geri alabilirim, çizginin geri kalanını bir şeyle değiştirebilir miyim? Kısaca, belirtilen bir dizenin çevresindeki tüm metni kaldırmak istiyorum. Tuhaflıkla sütunların silinmesi işe yaramaz, çünkü eşleşen dizeden önce ve sonra belirsiz miktarda karakter vardır. Herhangi bir fikrin var mı? referanslar geri kullanılarakSed çıkışı nasıl tersine çevrilir?

cevap

10

Dene: arama dizesi etrafında

sed 's/.*\(searchstring\).*/___\1___/' 

.* 'ın dize ama her şeyi eşleşir ve parantez o eşleşti hatırlamaya sed söyle. \1 ile ilk eşleşen dizeye başvurabilirsiniz. İşte

('bar Baz' ama her şeyi yerine) bir örnek:

$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/' 
___bar baz___ 

Sen yukarıda ne gibi desen ile 'bar Baz' yerini alabilir; Sadelik için basit bir dize kullandım.