【问题标题】:Text alignment center - shell script文本对齐中心 - shell 脚本
【发布时间】:2012-09-18 07:04:44
【问题描述】:

我正在使用 shell 脚本创建一个简单的基于控制台的脚本。它将在我的 bash shell 上运行 它是一个简单的基于菜单的驱动显示一些选项集。

现在我想根据屏幕大小对文本进行居中对齐。 如何在屏幕中心对齐文本?请帮助我

【问题讨论】:

    标签: shell ubuntu


    【解决方案1】:

    终于找到解决办法了:)

    COLUMNS=$(tput cols) 
    title="Hello world!" 
    printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title"
    

    【讨论】:

    • 如果你需要一个单行,它从命令行参数中获取输入:printf "%*s\n" $(( ( $(echo $* | wc -c ) + 80 ) / 2 )) "$*" 从命令行参数中获取输入,使用 wc 来计算字符数,默认为80 个字符。
    • 添加标题的长度会将其向右移动它的长度,只是 $COLUMNS/2 对我来说非常有用。
    【解决方案2】:

    在基于 BSD 的系统上,包括 MacOS,fmt 实用程序有一个 -c 标志来居中文本。

    echo $text | fmt -c -w $COLUMNS
    

    不幸的是,GNU fmt 有一个不兼容的 -c 标志,并且没有用于居中的替代方法。

    【讨论】:

      【解决方案3】:

      简单的 Perl 解决方案:

      perl -pe '$sp = " " x (($ENV{COLUMNS} - length) / 2); s/^/$sp/'
      

      【讨论】:

      • 试试看。只需将该行添加到您的脚本中,将要居中的文本通过管道传输 (generate-text | perl ...) 或将其用作参数 (perl ... text.txt)
      • 终于找到了解决方案:COLUMNS=$(tput cols) title="Hello world!" printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title"
      • @KarthickV:请将您的解决方案作为单独的答案发布,而不是作为对此答案的评论。它将帮助其他人更轻松地找到它。
      【解决方案4】:

      在中心打印文本:

      echo "Some Text" | sed  -e :a -e "s/^.\{1,$(tput cols)\}$/ & /;ta" | tr -d '\n' | head -c $(tput cols)
      

      输出:

                                          Some Text                                   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        • 2014-03-20
        • 1970-01-01
        • 2013-10-13
        • 2016-09-21
        • 2011-11-11
        • 2018-11-12
        相关资源
        最近更新 更多