打印单词字符串,其格式类似于从`ls`命令输出的文本

时间:2018-07-25 07:11:07

标签: bash shell sh

有没有可以打印任何字符串的命令,例如

  

“ Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean arcu   dui commodo nec tortor ut posuere malesuada magna“

要动态格式化为类似于ls命令输出的文本的列,例如

~$ls
Applications   Dropbox        Pictures       test2          playground
Desktop        Library        Public         test3          programs
Documents      Movies         VirtualBoxVMs  macports       projects
Downloads      Music          test1          test4

列数应与终端的大小相对应。

4 个答案:

答案 0 :(得分:1)

使用tr用换行符代替空格。然后使用column -cXXX格式化终端XXX字符宽的输出格式,并使用tput cols找出终端的实际宽度:

echo "..." | tr ' ' '\n' | column -c$(tput cols)

答案 1 :(得分:0)

column -t需要用换行符分隔的行,因此我们可以在指定的单词之间插入换行符以创建行。
所以:

  1. 我用sed 's/\(\([^ ]* \)\{5\}\)/\1\n/g'每5个字插入换行符
  2. 我用column -t创建了一个表

$ echo "Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean arcu dui commodo nec tortor ut posuere malesuada magna" | sed 's/\(\([^ ]* \)\{5\}\)/\1\n/g' | column -t -o$'\t'
Lorem       ipsum       dolor   sit     amet
consectetur adipiscing  elit    Aenean  arcu
dui         commodo     nec     tortor  ut
posuere     malesuada   magna   

但是,这可能是一个更好的解决方案,它考虑了端子宽度。

答案 2 :(得分:0)

您可以使用fmt来实现:,例如:

echo "Lorem ipsum .. .. .. . . magna" |fmt 
Lorem ipsum dolor sit amet consectetur adipiscing elit
Aenean arcu dui commodo nec tortor ut posuere malesuada
magna
  

-w,--width = WIDTH最大行宽(默认为75列)

答案 3 :(得分:0)

您可以使用printf和column选项轻松地做到这一点。

像这样的简单方法:

printf "%-8s\n" a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt j.txt k.txt l.txt m.txt n.txt o.txt p.txt q.txt r.txt s.txt t.txt u.txt v.txt w.txt x.txt y.txt z.txt | column

或循环:

#!/bin/bash

for aFileNames in a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt j.txt k.txt l.txt m.txt n.txt o.txt p.txt q.txt r.txt s.txt t.txt u.txt v.txt w.txt x.txt y.txt z.txt
do 
  printf "%-8s\n" $aFileNames
done | column

输出将如下所示:

a.txt        j.txt        s.txt
b.txt        k.txt        t.txt
c.txt        l.txt        u.txt
d.txt        m.txt        v.txt
e.txt        n.txt        w.txt
f.txt        o.txt        x.txt
g.txt        p.txt        y.txt
h.txt        q.txt        z.txt
i.txt        r.txt

如果需要,可以更改"%-8s"值以更改显示的列数。 有效值为:"-4", "-8", "-16", "-32", etc...

如果您在终端上和此处输入column -help,则可以找到有关它的更多信息: