В Bash многие привыкли использовать
sed, awk или tr для замены текста, но можно обойтись без них, используя встроенные механизмы обработки строк1. Простая замена в строке. Стандартная конструкция:
text="Hello, world!"
echo "${text/world/Bash}"
Вывод:
Hello, Bash!Здесь world заменяется на Bash.
2. Замена всех вхождений. Если слово встречается несколько раз, можно заменить все его появления:
text="apple banana apple orange"
echo "${text//apple/grape}"
Вывод:
grape banana grape orangeОбратите внимание на // — оно заменяет все вхождения.
3. Удаление подстроки. Чтобы удалить слово из строки, просто оставьте замену пустой:
text="error: file not found"
echo "${text/error: /}"
Вывод:
file not found4. Замена только в начале или конце строки.
Замена в начале строки:
text="error_log_123"
echo "${text/#error_/warn_}"
Вывод:
warn_log_123Замена в конце строки:
text="backup_20240101.tar"
echo "${text/%tar/gz}"
Вывод:
backup_20240101.gz5. Динамическая замена значений в переменных. Допустим, у нас есть путь, и мы хотим заменить часть его на другую:
path="/home/user/project/file.txt"
new_path="${path/user/admin}"
echo "$new_path"
Вывод:
/home/admin/project/file.txt6. Усложненный пример: замена динамических данных. Предположим, у нас есть строка с датой, и мы хотим заменить год на текущий:
text="Backup from 2023-05-01"
current_year=$(date +%Y)
echo "${text/2023/$current_year}"
Вывод (если 2025 год):
Backup from 2025-05-01BashTex 📱 #linux #utils