Використання sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
У межах команди команда sed ^ символ символу відповідає тексту, що починається з $prefix, а $текст, що закінчується, відповідає тексту $suffix.
У коментарях нижче Адріан Фрюхвірт зазначає кілька хороших моментів, але sed для цього може бути дуже корисним. Той факт, що вміст префікса $ і суфікса $ інтерпретується sed, може бути і хорошим, АБО поганим - доки ви звернете увагу, вам слід добре. Краса полягає в тому, що ви можете зробити щось подібне:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
що може бути тим, що ви хочете, і є більш фантазійним і потужнішим, ніж заміна змінної bash. Якщо ви пам’ятаєте, що з великою силою наступає велика відповідальність (як каже Павук), вам слід добре.
Швидкий вступ до sed можна знайти на веб-сайті http://evc-cit.info/cit052/sed_tutorial.html
Примітка щодо оболонки та її використання струн:
Для конкретного наведеного прикладу також працює наступне:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... але тільки тому, що:
- ехо неважливо, скільки рядків у списку аргументів, і
- У префіксі $ та суфіксі $ немає пробілів
Як правило, добре цитувати рядок у командному рядку, оскільки навіть якщо він містить пробіли, він буде представлений команді як єдиний аргумент. Ми цитуємо $ префікс і $ суфікс з тієї ж причини: кожна команда редагування в sed буде передана як один рядок. Ми використовуємо подвійні лапки, оскільки вони допускають змінну інтерполяцію; якби ми використовували одинарні лапки, команда sed отримала б буквальний характер, $prefixі $suffixце, звичайно, не те, чого ми хотіли.
Зауважте також моє використання одиничних лапок при встановленні змінних prefixта suffix. Ми, звичайно, не хочемо, щоб нічого в рядках було інтерпретовано, тому ми цитуємо їх, щоб не відбулося інтерполяції. Знову ж, у цьому прикладі це може і не знадобитися, але це дуже гарна звичка.