Bash:
Удаление символов, соответствующих шаблону
Как это сделать:
Удалить начальные и конечные пробелы:
text=" Привет, Мир! "
trimmed=$(echo "$text" | xargs)
echo "$trimmed"
Вывод: Привет, Мир!
Удалить все цифры:
text="B4sh i5 amaz1ng!"
cleaned=${text//[^a-zA-Z ]/}
echo "$cleaned"
Вывод: Bsh i amazng
Заменить конкретные символы:
text="Привет-Мир!"
cleaned=${text//-/_}
echo "$cleaned"
Вывод: Привет_Мир!
Подробнее
В начале текстовые инструменты обработки, такие как sed
и awk
, были основными для манипуляций со строками. Bash с тех пор включил в себя сопоставление с образцом и манипуляцию строками непосредственно в саму оболочку, предоставив своим пользователям множество возможностей без необходимости использования внешних команд.
Синтаксис ${parameter/pattern/string}
- это один из подходов, где вы заменяете первое совпадение pattern
на string
. Чтобы удалить все совпадения, просто добавьте еще один /
, как показано в приведенных выше примерах.
Альтернативами являются использование классических инструментов UNIX, таких как sed
, awk
, tr
, или более современных языков сценариев, таких как Python или Perl.
Под капотом Bash использует глобализацию и подстановочные знаки для сопоставления с образцом, но когда вы видите конструкции ${text//pattern/}
, вы имеете дело с расширением параметров Bash — функцией, которая очень удобна для манипуляции со строками.
Смотрите также
- Руководство по Bash о расширении параметров: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
- Статья о обработке текста в Linux: https://www.linuxjournal.com/content/pattern-matching-bash
- Электронная книга Sed & Awk 101 Hacks: https://www.thegeekstuff.com/ebooks/sed_awk_101_hacks