Название заголовка говорит само за себя: я хотел бы получить эти аккуратные цветные столбцы с выводом чего-то вроде ls -al
, скажем, как в ответе 10basetom на этот вопрос .
sed
или awk
и вставить escape-последовательность ANSI .
Название заголовка говорит само за себя: я хотел бы получить эти аккуратные цветные столбцы с выводом чего-то вроде ls -al
, скажем, как в ответе 10basetom на этот вопрос .
sed
или awk
и вставить escape-последовательность ANSI .
Ответы:
Это выполнимо с awk
. К сожалению, поскольку формат ls -l
не определен, невозможно найти решение, которое будет работать в каждой системе, поэтому в некоторых системах потребуется некоторая регулировка того, какой цвет использовать для какого столбца.
Прежде всего, мы хотим сохранить оригинальные пробелы, используемые ls -l
. В противном случае выравнивание столбцов будет неправильным. Мы можем сделать это с помощью FPAT
опции, благодаря такому ответу :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
В awk
, каждый позиционный параметр ( $1
, $2
и т. Д.) Относится к одному полю, то есть к одному столбцу в текущей строке. То, что было FPAT
сделано выше, это переопределение каждого поля, чтобы включить все предыдущие пробелы, поэтому, когда вы print
возвращаете его обратно, он сохраняет пробелы, чтобы столбцы оставались в том же положении.
Теперь мы можем просто отредактировать каждое поле, чтобы вставить код цвета , а затем распечатать отредактированный вывод:
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
Обратите внимание, что каждый столбец сбрасывается обратно по умолчанию ( 0
между [
и m
) впоследствии. Если вы хотите, чтобы цвет проходил через несколько столбцов, вы можете пропустить этот код. Лично я предпочитаю указывать каждый столбец независимо.
Вы можете определить команду многократного использования в вашем .bashrc
. Например:
lsc() {
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
}
Вам может потребоваться перезапустить bash
сеанс (или запустить source ~/.bashrc
), чтобы запустить определение этой функции.
Отсюда вы можете просто позвонить lsc
, чтобы получить желаемый результат:
--color=always
. Пока вы не применяете разные цвета к столбцу имени файла ( $9
в моем примере), их awk
следует пропустить.
--color=always
- это расширение GNU, поэтому если вы работаете не в системе GNU (например, macOS, другие BSD), вам нужно либо установить версию GNU, либо использовать альтернативную версию .
Это напечатает второй столбец ls -alF
красным цветом, третий - восьмой - синим, а девятый - черным:
ls -alF | awk -v black=$(tput setaf 0) -v red=$(tput setaf 1) -v blue=$(tput setaf 4) '{$2=red $2; $3= blue $3; $9=black $9} 1'
Это только в качестве примера. Вы можете настроить это по своему усмотрению.
Для тех, кто предпочитает их код в несколько строк:
ls -alF | awk -v black=$(tput setaf 0) \
-v red=$(tput setaf 1) \
-v blue=$(tput setaf 4) \
'{
$2=red $2
$3= blue $3
$9=black $9
}
1'
tput
утилита для генерации разнообразных управляющих кодов для вашего терминала Например, tput setaf n
задает цвет переднего плана, n
где n
может варьироваться от 0 до 7
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
Вы можете прочитать больше о tput
его цветовых возможностях здесь .
В AWK код определяет переменные black
, red
и blue
которые содержат концевые коды черный, красный и синий, соответственно. Эти коды размещаются в начале любого столбца, который мы хотим раскрасить.
Одна хитрость в том, что цветовые коды не сбрасываются самостоятельно. Таким образом, независимо от того, какой последний цвет вы укажете в одной строке, будет, если не указана другая цветовая команда, цветом по умолчанию для следующей строки.
awk
! Я бы посоветовал вам включить шаблон для сохранения выравнивания столбцов :)
FPAT
трюк для поддержания правильного расстояния.