有没有可以打印任何字符串的命令,例如
“ 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
列数应与终端的大小相对应。
答案 0 :(得分:1)
使用tr
用换行符代替空格。然后使用column -cXXX
格式化终端XXX
字符宽的输出格式,并使用tput cols
找出终端的实际宽度:
echo "..." | tr ' ' '\n' | column -c$(tput cols)
答案 1 :(得分:0)
column -t
需要用换行符分隔的行,因此我们可以在指定的单词之间插入换行符以创建行。
所以:
sed 's/\(\([^ ]* \)\{5\}\)/\1\n/g'
每5个字插入换行符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
,则可以找到有关它的更多信息: