dircolors: измените настройки цветов глобально

Вот короткая awk острота:

awk '/^\[/ {ofn=$2 ".txt"} ofn {print > ofn}' input.txt

Как это работает?

  • /^\[/ строки соответствий, запускающиеся с левой квадратной скобки, и
  • {ofn=$2 ".txt"} устанавливает переменную на второе white-spaced-delimited слово как наше имя выходного файла. Затем
  • ofn условие, которое оценивает к истинному, если переменная установлена (таким образом то, чтобы заставлять строки перед Вашим первым заголовком быть проигнорированной)
  • {print > ofn} перенаправляет текущую строку в указанный файл.

Обратите внимание, что все пробелы в этом awk сценарии могут быть удалены, если компактность делает Вас счастливыми.

Обратите внимание также, что для вышеупомянутого сценария действительно нужны заголовки раздела, чтобы иметь пробелы вокруг а не в них. Если Вы хотели смочь обработать заголовки раздела как [foo] и [ this that ], Вам было бы нужно очень немного больше кода:

awk '/^\[/ {sub(/^\[ */,""); sub(/ *\] *$/,""); ofn=$0 ".txt"} ofn {print > ofn}' input.txt

Это использует awk's sub() функционируйте для разделения продвижения и запаздывания square-brackets-plus-whitespace. Обратите внимание, что на стандарт awk поведение, это свернет пробел (разделитель полей) в одиночный пробел (т.е. [ this that ] сохраняется к "this that.txt"). Если поддержание исходного пробела в Ваших выходных именах файлов важно, можно экспериментировать установкой FS.

41
03.04.2017, 04:13
3 ответа

ls берет его настройки цветов от переменной среды LS_COLORS. dircolors просто удобный способ генерировать эту переменную среды. Чтобы иметь эту переменную среды вступают в силу в масштабе всей системы, помещают его в файл запуска Вашей оболочки.

Для bash, Вы вставили это /etc/profile:

# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.

eval "$(dircolors /etc/DIR_COLORS)"

Для zsh, Вы или вставили его /etc/zshrc или устройте zsh читать /etc/profile на запуске. Ваше распределение могло бы иметь zsh уже сделайте это. Я просто поднимаю это для указания на ту установку dircolors для действительно все зависят от оболочки, которую они используют.

Что касается где dircolors получает его настройки от, когда Вы не указываете файл, он просто использует некоторые встроенные значения по умолчанию.

Можно использовать xterm256 цветных управляющих кодов в Вашем dircolors файле, но знать, что они будут только работать на xterm совместимые терминалы. Они не будут работать над текстовой консолью Linux, например.

Формат для 256 цветных управляющих кодов 38;5;colorN для основных цветов и 48;5;colorN для цветов фона. Так, например:

.mp3  38;5;160                   # Set fg color to color 160      
.flac 48;5;240                   # Set bg color to color 240
.ogg  38;5;160;48;5;240          # Set fg color 160 *and* bg color 240.
.wav  01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!
37
27.01.2020, 19:35
  • 1
    Вы могли объяснить, как я могу использовать 256 цветных управляющих кодов? Скажем, я хочу изменить следующее .mp3 00;36 для использования color126 от upload.wikimedia.org/wikipedia/en/1/15/Xterm_256color_chart.svg –  user1968963 09.10.2013, 21:26
  • 2
    диаграммы цветов xterm-256 Несомненно, посмотрите мое редактирование. –  Matt 09.10.2013, 21:52

Где делает команду dircolors --print-database возьмите настройки от, когда никакой файл не будет существовать.

Согласно руководству, это использует предварительно скомпилированную базу данных в отсутствие файла.

Если файл указан, dircolors читает его для определения который цвета использовать для который типы файлов и расширения. Иначе предварительно скомпилированная база данных используется. Для получения дополнительной информации на формате этих файлов, выполненных‘dircolors --print-database’.

Для изменения настроек для всех Вы могли создать a /etc/dircolors файл и добавляет следующее к /etc/bashrc:

d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"
9
27.01.2020, 19:35

Linux выбрал консольные цвета фона с dircolors:

Ваш dircolors файл управляет цветами для слов, которые появляются через ls на консоли. Найдите это .dircolors файл для Вашего распределения, ссылки на справку:

http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html

Для меня на Fedora 17 мой dircolors файл: /etc/DIR_COLORS

Копия /etc/DIR_COLORS в Ваш /home/el/.dircolors каталог. Создайте его, если это не существует.

Отредактируйте/home/el/.dircolors, ищите текст "dir".

Измените это:

DIR 01;34   # directory

К этому:

DIR 01;36   # directory

Сохраните и закройте и перезапустите оболочку. Каталоги идут от темно-синего на черном цвете (нечитабельном) яркому чирку на (читаемом) черном цвете.

8
27.01.2020, 19:35
  • 1
    1: нет /etc/DIR_COLORS в дистрибутиве OP, Debian. И он уже знает о ~/.dircolors, это не было вопросом –  MestreLion 29.01.2015, 10:01

Теги

Похожие вопросы