Sed kullanma:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Sed komutunda ^
karakter $prefix
, ile başlayan metni ve sondaki $
ile biten metni eşleştirir $suffix
.
Adrian Frühwirth, aşağıdaki yorumlarda bazı iyi noktalara değinmektedir, ancak sed
bu amaçla çok yararlı olabilir. $ Öneki ve $ soneki içeriğinin sed tarafından yorumlanması gerçeği iyi VEYA kötü olabilir - dikkat ettiğiniz sürece iyi olmalısınız. Güzellik şu ki, böyle bir şey yapabilirsiniz:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Bu da istediğiniz gibi olabilir ve bash değişken ikamesinden daha meraklı ve daha güçlüdür. Büyük bir güçle (Spiderman'ın dediği gibi) büyük sorumluluk getirdiğini hatırlarsanız, iyi olmalısınız.
Sed'e hızlı bir giriş http://evc-cit.info/cit052/sed_tutorial.html adresinde bulunabilir.
Kabuk ve dizeleri kullanımı ile ilgili bir not:
Verilen belirli örnek için aşağıdakiler de işe yarar:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... ama sadece:
- echo argüman listesinde kaç tane dizenin olduğu umurumda değil ve
- $ Önekinde ve $ sonekinde boşluk yok
Komut satırında bir dize alıntı yapmak genellikle iyi bir uygulamadır, çünkü boşluklar olsa bile komuta tek bir argüman olarak sunulacaktır. Aynı sebepten dolayı $ öneki ve $ son ekini sunuyoruz: sed'e yapılan her düzenleme komutu bir dize olarak geçirilecektir. Değişken enterpolasyona izin verdikleri için çift tırnak kullanırız; tek tırnak kullansaydık sed komutunun değişmez bir değeri vardı $prefix
ve $suffix
bu kesinlikle istediğimiz şey değildi.
Bildirim da tek tırnak kullanımım değişkenleri ayarlarken prefix
ve suffix
. Dizelerde hiçbir şeyin yorumlanmasını kesinlikle istemiyoruz, bu yüzden bunları tek tek alıntılıyoruz, böylece hiçbir enterpolasyon gerçekleşmiyor. Yine, bu örnekte gerekli olmayabilir, ancak içine girmek çok iyi bir alışkanlıktır.