Bash додайте пробіли для виправдання рядка


20

Мій поточний код виглядає приблизно так:, x=${y:0:40}що обмежує довжину рядка до 40 символів. У випадку, якщо рядок коротший за 40 символів, чи можливо заповнити проміжні місця пробілами?

Тож якщо моє y="very short text"

Я хотів би, щоб моє y було:

y = "дуже короткий текст (+25 пробілів) "

Відповіді:


20

Якщо ці символи є однобайтовими, тобто якщо ви знаходитесь у локалі, де набір однобайтових (наприклад, iso8859-1) або якщо шаблоном локалі є UTF-8, але текст лише ASCII, ви можете це зробити :

printf -v y %-40.40s "$y"

Це буде охоплювати як обрізки, так і накладки.

Якщо ні, ви завжди можете додати 40 пробілів і використовувати свій ${y:0:40}підхід.

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh має спеціальні оператори для лівої та правої прокладки:

y=${(r:40:)y}

(також робить усічення). zsh«S printfпідраховує в символах замість байт, так що не матиме bash» проблеми з вище. Однак зауважте, що вам потрібен zsh5.3 або новіший -vваріант.

Дивіться також цю відповідь на пов'язане запитання для отримання більш детальної інформації, якщо ви стикаєтеся з персонажами, які не мають однакової ширини.


14

Спробуйте printf:

printf '%-40s' "$y"

10

Чисто bash:

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

Метод полягає в тому, щоб додати 0-40 пробілів до кожного рядка після обрізання.

Результат, (зверніть увагу на позиції з однією цитатою):

'very short text                         '

1
Я б скоріше скористався цим методом, оскільки він буде працювати безпосередньо над змінними і не потребує виведення.
Девід Табернеро М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.