Sumary
GNU sözdizimi:
sed '/claudio/{s//claudia/;:p;n;bp}' file
Veya bile (değiştirilecek kelimeyi yalnızca bir kez kullanmak için:
sed '/\(claudi\)o/{s//\1a/;:p;n;bp}' file
Veya POSIX sözdiziminde:
sed -e '/claudio/{s//claudia/;:p' -e 'n;bp' -e '}' file
Herhangi bir sed üzerinde çalışır, yalnızca ilkini bulmak için gereken kadar satır işlerclaudio işler claudio, ilk satırda olsa bile çalışır ve yalnızca bir regex dizesi kullandığından daha kısadır.
detay
Yalnızca bir satırı değiştirmek için seçmeniz gerekir sadece bir satır.
Bir kullanarak 1,/claudio/(sorunuzdan) seçer:
- ilk satırdan (koşulsuz)
- için bir sonraki dizeyi içeren çizgi
claudio.
$ cat file
claudio 1
antonio 2
claudio 3
michele 4
$ sed -n '1,/claudio/{p}' file
claudio 1
antonio 2
claudio 3
İçerdiği herhangi bir satırı seçmek için şunu claudiokullanın:
$ sed -n `/claudio/{p}` file
claudio 1
claudio 3
Ve yalnızca dosyadaki ilkini seçmek için şunu claudiokullanın:
sed -n '/claudio/{p;q}' file
claudio 1
Ardından, yalnızca bu satırda değişiklik yapabilirsiniz:
sed '/claudio/{s/claudio/claudia/;q}' file
claudia 1
Hangi sadece değişecek ilk Birden fazla olabilir bile üzerine, hat üzerinde regex maçın oluşumunu ilk satırda.
Tabii ki, /claudio/regex basitleştirilebilir:
$ sed '/claudio/{s//claudia/;q}' file
claudia 1
Ve sonra, eksik olan tek şey değiştirilmemiş diğer tüm satırları yazdırmaktır:
sed '/claudio/{s//claudia/;:p;n;bp}' file
info sed: (0,/REGEXP/: 0 ise satır numarası gibi bir adres şartnamede kullanılabilecek0,/REGEXP/şekildesedçok ilk giriş satırına Regexp'i eşleştirmeye çalışacaktır Başka bir deyişle,.0,/REGEXP/Olan benzer şekilde1,/REGEXP/, eğer ADDR2 girişin ilk satırına denk gelirse, 0, / REGEXP / form aralığı sonlandırmayı düşünürken, 1, / REGEXP / form aralığının başlangıcıyla eşleşir ve böylece aralık düzenli ifadenin ikinci oluşumuna kadar )