2012-10-22 12 views

cevap

10

Sen bu şekilde yapabilirsiniz:

sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file 

Bu (/// s) new text ile desen değiştirir ve sonunda (t) atlar. Aksi halde bir sonraki deseni dener. Ayrıca bkz. sed commands summary.

sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file 

veya sed komut dosyası komutları koymak:

Ayrıca ; ile komutları ayırabilirsiniz bu şekilde

s/^avpgw/new text/ 
t 
s/^av/new text/ 
t 
s/^/new text/ 

ve diyoruz:

sed -f commandfile file 

Davayı görmezden gelmek istiyorsanız,numaralı gibi ikame komutunun sonuna bir i ekleyin.. Başka bir yol, s/^[aA][vV]/new text/ karakter kümeleriyle hecelemek. Ancak bu, sed spesifik değildir, bunun için genel olarak normal ifadeleri arayabilirsiniz.

+0

teşekkürler. Mükemmel çalıştı. Durumun duyarsız olması için bir yol var mı. Av, AV, av vb. Hepsi değiştirilmelidir. – user1765709

+0

@ user1765709 Karakter kümelerini kullanabilir veya bir değiştirici ekleyebilirsiniz. Değiştirilmiş cevabımı görün. –

+0

Ben centos'um ve bu işe yaramıyor. herhangi bir fikrin neden? – Dobler

1

sen (GNU sed) Bu işe yarayabilecek: Yanıtınız için

sed -r 's/^av(pgw)?.*/replacement/;t;s/^/replacement /' file 
+0

(pgw) {, 1} 'daha iyi olur muydu? –

+0

@JanitoVaqueiroFerreiraFilho iyi nokta. GNU sed ayrıca, aynı 0 veya 1 anlamına gelen isteğe bağlı meta karakterde '' 'sağlar. Fakat eğer dize 'avpgwpgw'' diye bir şans yoksa * iyidir. – potong

+0

Teşekkürler! Sanırım hepsi ne kadar güvenebileceğimize bağlıdır =) –

İlgili konular