Использование 'column -t' в macOS против CentOS - PullRequest
0 голосов
/ 11 мая 2019

Я хочу напечатать какой-нибудь текст в красивой печатной таблице.Возьмите этот пример:

{
    echo -e "\tIP address:-1.2.3.4"
    echo -e "\tNetmask:-1.2.3.4"
    echo -e "\tGateway:-1.2.3.4"
    echo -e "\tDefault gateway:-1.2.3.4"
} | column -ts-

На macOS (для меня 10.14.4) это печатает так, как я и ожидал:

    IP address:       1.2.3.4
    Netmask:          1.2.3.4
    Gateway:          1.2.3.4
    Default gateway:  1.2.3.4

Однако на CentOS (протестировано на 6 и7) это не так красиво:

    IP address:   1.2.3.4
    Netmask:   1.2.3.4
    Gateway:   1.2.3.4
    Default gateway:   1.2.3.4

Итак, мой вопрос: есть ли лучший способ, которым я должен это делать?По крайней мере, для CentOS?

Бонусные баллы, если вы можете сказать мне , почему работает на macOS, но не CentOS!

Редактировать :

Мои выходные данные (т.е. столбцы) могут различаться по длине в зависимости от некоторых различных факторов, поэтому я бы предпочел решение, при котором мне не нужно вручную указывать количество пробелов для печати, чтобы оно выглядело симпатично.

1 Ответ

0 голосов
/ 11 мая 2019

echo и column хороши для взлома командной строки.

Лучшая практика для красивой печати обычно включает printf:

IPv4=('IP address:' 1.2.3.4 Netmask: 1.2.3.4 Gateway: 1.2.3.4 Default\ gateway: 1.2.3.4)
ip=; for ip in "${IPv4[@]}"; do ((${#ip} > max)) && max=${#ip}; done
printf "\t%-$((max+2))s%s\n" "${IPv4[@]}"

\t%-18s%s\n означает "табуляция букв, строка дополняется до 18 символов, строка, перевод строки ".Он содержит два спецификатора аргумента %x, который bash будет перезаписывать для всех аргументов.

Примечание: многословные элементы должны быть заключены в кавычки или их пробелы должны быть экранированы, чтобы их можно было обрабатывать по отдельности

edit: добавлена ​​максимальная длина flexbile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...