【问题标题】:right text align - bash右文本对齐 - bash
【发布时间】:2011-05-13 10:42:39
【问题描述】:

我有一个问题。 我的文本应该以指定的宽度右对齐。我已经设法将输出削减到所需的大小,但我无法将所有东西都放在右侧

这是我得到的:

#!/usr/local/bin/bash

length=$1
file=$2
echo $1

echo -e "length = $length \t  file = $file "
f=`fold -w$length $file > output`
while read line
do
        echo "line is $line"
done < "output"

谢谢

【问题讨论】:

    标签: bash shell alignment text-alignment fold


    【解决方案1】:

    试试:

    printf "%40.40s\n" "$line"
    

    这将使它与宽度 40 右对齐。如果您不想截断,请删除 .40(感谢 Dennis!):

    printf "%40s\n" "$line"
    

    例如:

    printf "%5.5s\n" abc
    printf "%5.5s\n" abcdefghij
    printf "%5s\n" abc
    printf "%5s\n" abcdefghij
    

    将打印:

      abc
    abcde
      abc
    abcdefghij
    

    【讨论】:

    • 这给了我一些奇怪的输出,不知道为什么
    • :) 你觉得我能猜到输出是什么吗?请在另一条评论中发布问题。如果太长,请编辑您的问题并将其发布到那里。
    • @cubrilo:您可能需要一个 \n 换行符,以便输出与原始内容中隐含的意图相匹配:printf "%40.40s\n" "$line"。请注意,.40 将导致输出被截断,如果它可能是您想要的更长,但如果不是,您可以省略该部分。
    【解决方案2】:

    你的最后一步可能是

    sed -e :a -e 's/^.\{1,$length\}$/ &/;ta'
    

    【讨论】:

    • 当我把这个放在 while: f=fold -w$lenght $file &gt; output while read line do sed -e :a -e 's/^.\{1,$length\}$/ &/;ta ' echo " 在 sed 之后,行是 $line" done
    • @cubrilo:将单引号改为双引号:sed -e :a -e "s/^.\{1,$length\}$/ &amp;/;ta",但是这种方式很慢,因为它会循环直到字符串足够长。
    【解决方案3】:

    这是一个非常古老的问题(2010 年),但它是谷歌的最高结果,所以也可以。在此处的现有答案中,一个是不针对终端宽度进行调整的猜测,另一个是调用 sed,这会产生不必要的成本。

    printf 解决方案更好,因为它是 bash 内置的,所以它不会减慢速度,但不是猜测 - bash 给你 $COLUMNS 告诉你你正在处理的终端窗口有多宽。

    所以虽然你可以明确地对齐到第 40 列:

    printf "%40s\n" "$the_weather"
    

    您可以根据终端宽度调整其大小:

    printf "%$COLUMNSs\n" "$the_weather"
    

    (因为我们在这里混合了语法,所以我们对 bash 变量使用了完整形式的语法,即 ${COLUMNS} 而不是 $COLUMNS,以便 bash 可以从其他语法中识别变量

    在行动中......现在我们已经释放了所有 sed 处理时间,我们可以将其用于其他事情:

    the_weather="$(curl -sm2 'http://wttr.in/Dublin?format=%l:+%c+%f')"
    printf "%${COLUMNS}s\n" "${the_weather:-I hope the weather is nice}"
    

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2013-07-23
      • 2012-06-29
      • 2020-01-26
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多