Назва заголовку говорить про це все: я хотів би отримати ці акуратні кольорові стовпці з виводу чогось такого ls -al
, скажімо, як у відповіді 10basetom на це запитання .
sed
або awk
вставити послідовність аварійної передачі ANSI .
Назва заголовку говорить про це все: я хотів би отримати ці акуратні кольорові стовпці з виводу чогось такого ls -al
, скажімо, як у відповіді 10basetom на це запитання .
sed
або awk
вставити послідовність аварійної передачі 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
трюк щодо правильності проміжку.