Za pomocą sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
W poleceniu sed ^
znak dopasowuje tekst zaczynający się od $prefix
, a znak końcowy $
dopasowuje tekst kończący się na$suffix
.
Adrian Frühwirth podaje kilka dobrych uwag w komentarzach poniżej, ale sed
w tym celu może być bardzo przydatny. Fakt, że treść prefiksu $ i sufiksu $ są interpretowane przez sed, może być albo dobry, albo zły - o ile tylko zwrócisz uwagę, wszystko powinno być w porządku. Piękno polega na tym, że możesz zrobić coś takiego:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
co może być tym, czego chcesz, i jest zarówno bardziej wymyślne, jak i potężniejsze niż podstawianie zmiennych bash. Jeśli pamiętasz, że z wielką mocą wiąże się wielka odpowiedzialność (jak mówi Spiderman), powinieneś być w porządku.
Szybkie wprowadzenie do sed można znaleźć na stronie stronie http://evc-cit.info/cit052/sed_tutorial.html
Uwaga dotycząca powłoki i użycia ciągów:
W podanym konkretnym przykładzie działałyby również:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... ale tylko dlatego, że:
- echo nie obchodzi, ile ciągów znajduje się na liście argumentów, oraz
- W prefiksie $ i sufiksie $ nie ma spacji
Zasadniczo dobrą praktyką jest cytowanie ciągu w wierszu poleceń, ponieważ nawet jeśli zawiera spacje, zostanie on przedstawiony poleceniu jako pojedynczy argument. Cytujemy przedrostek $ i sufiks $ z tego samego powodu: każde polecenie edycyjne sed będzie przekazywane jako jeden ciąg. Używamy podwójnych cudzysłowów, ponieważ pozwalają one na zmienną interpolację; gdybyśmy użyli pojedynczych cudzysłowów, komenda sed uzyskałaby dosłowność $prefix
i na $suffix
pewno nie tego chcieliśmy.
Zauważ też, że używam pojedynczych cudzysłowów przy ustawianiu zmiennych prefix
i suffix
. Z pewnością nie chcemy interpretować niczego w ciągach znaków, dlatego zacytujemy je pojedynczo, aby nie doszło do interpolacji. Ponownie, w tym przykładzie może nie być konieczne, ale bardzo dobrym nawykiem jest wchodzenie w to.