Приложение здесь - «санация» строк для включения в файл журнала.В качестве аргумента давайте предположим, что 1) правильное окрашивание строки во время выполнения;и 2) Мне нужны начальные и конечные пробелы на экране, но лишние пробелы удалены из журнала.
Конкретное приложение здесь включается в файл журнала.Не все строки будут раскрашены, и не все строки будут иметь начальные / конечные пробелы.
Учитывая это, я хочу
- Удалить все коды и установить цвет и сброс.Причина этого будет очевидна через мгновение
- Удалите начальные и конечные пробелы
Когда вы ищете (где угодно), как разделять цветовые коды в bash, вы можете найти много разных способов сделать это.Однако то, что я обнаружил до сих пор, так это то, что никто не обращает внимания на конечный сброс;$ (tput sgr0).В примерах, которые я видел, это несущественно, однако мое дополнительное требование убрать начальные / конечные пробелы усложняет / делает это требованием.
Вот мой пример сценария, который демонстрирует проблему:
#!/bin/bash
# Create a string with color, leading spaces, trailing spaces, and a reset
REPLY="$(tput setaf 2) This is green $(tput sgr0)"
echo "Colored output: $REPLY"
# Remove initial color code
REPLY="$(echo "$REPLY" | sed 's,\x1B\[[0-9;]*[a-zA-Z],,g')"
echo "De-colorized output: $REPLY"
# Remove leading and trailing spaces if present
REPLY="$(printf "%s" "${REPLY#"${REPLY%%[![:space:]]*}"}" | sed -n -e 'l')"
echo "Leading spaces removed: $REPLY"
REPLY="$(printf "%s" "${REPLY%"${REPLY##*[![:space:]]}"}" | sed -n -e 'l')"
echo "Trailing spaces removed: $REPLY"
Вывод (не могу понять, как здесь закрасить текст, предположим, что первая строка зеленая, а последующие строки нет):
Я желаю увидеть ошибку моих способов, но после примерно трех часов, пробуя разные вещи, я почти уверен, что мое google-fu меня подводит.
Спасибо за любую помощь.