Sed kullanarak çok karakterli dizelerin açgözlü olmayan eşleştirmesi bu şekilde yapılır. Her değiştirmek istediğiniz Diyelim foo...bariçin <foo...bar>böylece örneğin bu girişi:
$ cat file
ABC foo DEF bar GHI foo KLM bar NOP foo QRS bar TUV
bu çıktı olmalı:
ABC <foo DEF bar> GHI <foo KLM bar> NOP <foo QRS bar> TUV
Bunu yapmak için foo ve çubuğu ayrı ayrı karakterlere dönüştürür ve daha sonra bu karakterlerin aralarındaki olumsuzlamayı kullanırsınız:
$ sed 's/@/@A/g; s/{/@B/g; s/}/@C/g; s/foo/{/g; s/bar/}/g; s/{[^{}]*}/<&>/g; s/}/bar/g; s/{/foo/g; s/@C/}/g; s/@B/{/g; s/@A/@/g' file
ABC <foo DEF bar> GHI <foo KLM bar> NOP <foo QRS bar> TUV
Yukarıda:
s/@/@A/g; s/{/@B/g; s/}/@C/gdönüştürülür {ve }girdide bulunmayan yer tutucu dizelere dönüştürülür , böylece bu grafikler dönüştürülebilir foovebar için.
s/foo/{/g; s/bar/}/gdönüştürmektedir foove bariçin {ve }sırasıyla
s/{[^{}]*}/<&>/gdönüştürme - istediğimiz op performans foo...bariçin<foo...bar>
s/}/bar/g; s/{/foo/gdönüştürmektedir {ve }geri foove bar.
s/@C/}/g; s/@B/{/g; s/@A/@/g yer tutucu dizelerini orijinal karakterlerine geri dönüştürüyor.
Yukarıdakilerin, ilk adımda bu tür dizeler ürettiği için girişte bulunmayan belirli bir dizeye dayanmadığını {[^{}]*}ve gerektiği kadar çok kez kullanabileceğiniz için hangi belirli regexp'in eşleşmesini istediğinizi önemsemediğini unutmayın. ifadesinde istediğiniz gerçek eşleşmeyi izole etmek ve / veya seds sayısal eşleme işleci ile, örneğin yalnızca 2. gerçekleşmeyi değiştirmek için:
$ sed 's/@/@A/g; s/{/@B/g; s/}/@C/g; s/foo/{/g; s/bar/}/g; s/{[^{}]*}/<&>/2; s/}/bar/g; s/{/foo/g; s/@C/}/g; s/@B/{/g; s/@A/@/g' file
ABC foo DEF bar GHI <foo KLM bar> NOP foo QRS bar TUV