Если Вы желаете изменить свои цвета в консоли, которая является внешняя X, то можно указать, раскрашивает Ваш .bashrc
, как так:
if [ "$TERM" = "linux" ]; then
echo -en "\e]P0222222" #black
echo -en "\e]P8222222" #darkgrey
echo -en "\e]P1803232" #darkred
....
fi
Где Вы определяете черный как #222222
См. это сообщение для деталей: http://phraktured.net/linux-console-colors.html
Если Вы работаете в X, то можно настроить установку путем определения цветов в Вашем .Xresources
как так:
!black
*color0: #3D3D3D
*color8: #5E5E5E
!red
*color1: #8C4665
*color9: #BF4D80
...
и затем получая этот файл, когда Вы запускаете X, обычно от Вашего .xinitrc
:
xrdb -merge ~/.Xresources
Wiki Дуги имеет страницу на.Xresources, который объясняет все опции: https://wiki.archlinux.org/index.php/Xresources
Другое улучшение Вы можете сделать или в X или не должны указать все различные типы файлов, что требуется окрасить — и их соответствующие цвета в a .dir_colors
файл, как так:
.xinitrc 01;31
.Xauthority 01;31
.Xmodmap 00;31
.Xresources 01;33
...
Для начала работы скопировать /etc/dir_colors
Вашему пользователю /home
каталог и вносит Ваши изменения. Затем получите это от Вашего .bashrc
с eval $(dircolors -b ~/.dir_colors)
Это позволит Вам мелкомодульное управление цветами файлов и типов файлов, когда Вы будете использовать ls
.
Можно найти (невероятно подробный и полный) .dir_colors
файл в качестве примера здесь: https://github.com/trapd00r/LS_COLORS/blob/master/LS_COLORS
С комбинацией всех трех подходов можно создать довольно универсальную установку, работаете ли Вы в консоли или в X.
Самый простой ответ является sed's s
команда. Необходимо преобразовать regexp синтаксис в Основные регулярные выражения, и замена будет применена последовательно на каждой строке. Можно использовать \1
через \9
относиться к заключенным в скобки группам в исходной строке. Добавьте g
модификатор для замены всех случаев; в других отношениях только первое вхождение заменяется.
sed -e 's/basic regexp/replacement string/g'
Более гибкая утилита является awk. Это также обрабатывает свой вход линию за линией по умолчанию, но можно изменить разделитель записей с -vRS=…
(стандарт awk хочет, чтобы отдельный символ или пустое значение означал две или больше новых строки; Простофиля (версия GNU) принимает регулярное выражение). sub
функция выполняет единственную замену, и gsub
замены все происшествия. Замещающая строка интерпретируется буквально за исключением \
и &
; если Вы хотите обратиться к заключенным в скобки группам, можно использовать match
и subtring
функции.
awk '{gsub(/regexp/, "replacement string")}'
Bash имеет встроенную поддержку соответствия regexp: [[ text =~ regexp ]]
. Можно создать текст замены с помощью подобранных подстрок, сохраненных в BASH_REMATCH
массив. Использовать read
или cat
получить вход и printf
испускать вывод. Следующий псевдокод выполняет несколько замен (предупреждение, непротестированное; код, как предполагается, выполняет несколько замена слева направо, как обычно, я надеюсь, что разобрался в нем).
# The end marker must not have a prefix that is a suffix of a match of the regexp,
# and must not start or end with a newline
end_marker='EOF'
text=$(cat; echo "$end_marker")
while [[ $text =~ regexp(.*)$ ]]; then
printf %s%s "${text%"$BASH_REMATCH[0]"}" "replacement string"
text=$BASH_REMATCH[$#BASH_REMATCH]
fi
done
printf %s "${text%"$end_marker"}"
(Несколько слов объяснения: маркер конца должен постараться не запаздывать новые строки, разделяемые заменой команды. ${text%"$BASH_REMATCH[0]"}
извлекает часть текста, который появился перед соответствием. Обратите внимание, что мы не можем использовать ^(.*)
в начале regexp или мы получили бы последнее соответствие вместо первого. После соответствия мы выполняем итерации по суффиксу. Наконец мы печатаем несопоставленный остаток минус маркер конца.)
Если Вы удовлетворены подстановочным соответствием и ограниченными способностями к тексту замены, удар также имеет ${variable/pattern/replacement}
. Удвойте первую наклонную черту для замены всех случаев. Шаблоны действительно имеют силу регулярных выражений (но с необычным синтаксисом) если extglob
опция установлена.
можно использовать инструменты как sed
и awk
, но по-моему они являются очень устаревшими и только полезными для узко определенных задач.
лучшая ставка должна перенаправить STDIN к остроте жемчуга или сценарию. поддержка regex perl так хороша, что большинство других языков теперь поддерживает некоторую совместимость с ними. там ровны a2p
и s2p
инструменты для преобразования sed и awk непосредственно в жемчуг. использование жемчуга позволяет Вам использовать полноту CPAN, чтобы помочь Вам решить свои проблемы.
и если Вам не нравится жемчуг, можно использовать Python в подобной способности.
awk
полный по Тьюрингу язык программирования... Как это является узким?. sed
вполне эффективный текстовый редактор. "Вытесненный" субъективная оценка, не мера уместности, уместности или возможности.
– Mario G.
03.08.2017, 04:36