Это выполнимо с 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
, чтобы получить желаемый результат: