2013-05-08 23 views

cevap

40

Bunlardan biriyle yapabilirsiniz:

sed 's/.*six.*/fault/' file  # check all lines 
sed '/six/s/.*/fault/' file  # matched lines -> then remove 

O six içeren tam bir çizgi alır ve fault değiştirir.

Örnek:

$ cat file 
six 
asdf 
one two six 
one isix 
boo 
$ sed 's/.*six.*/fault/' file 
fault 
asdf 
fault 
fault 
boo 

Bu Daha genel Replace whole line containing a string using Sed

için this solution dayanan, bir ifade sed '/match/s/.*/replacement/' file kullanabilir. Bu, match içeren satırlarda sed 's/match/replacement/' ifadesini gerçekleştirir. Senin durumunda bu olacaktır:

sed '/six/s/.*/fault/' file 

Ne 'bir veya iki altı ila sekiz 1103 dört' var ve biz bizim "kötü" olarak 'sekiz' ve 'onbir' dahil istiyorsanız kelimeler?

Bu durumda birden koşulları için -e kullanabilirsiniz: vb

sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file 

ve.

Ya da:

sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file 
+0

Eğer 'bir iki altı sekiz on bir üç dört' varsa ve 'kötü' kelimemiz olarak 'sekiz' ve 'on bir' eklemek istersek? S /.* altı | sekiz | onbir. */Hata/g çalışır mı? – irek

+0

Bu, -e ile mümkündür, güncellenmiş cevabımı görün. – fedorqui

+0

Zaman ayırdığınız için teşekkür ederiz! – irek

3

Bu (GNU sed) için işe yarayabilecek:

sed -e '/six/{c\fault' -e ';d}' file 

ya: cevaplar Üstü

sed '/six/{c\fault'$'\n'';d}' file 
2

sadece söz, benim için iyi çalıştı alternatif yol

M Tek desen atch ve yenisi ile değiştirin:

sed -i '/six/c fault' file 

Maç çoklu desen ve yenisi ile değiştirin (bitiştirmek komutlar):

sed -i -e '/one/c fault' -e '/six/c fault' file 
İlgili konular