如何获取ASCII字符类似于linux命令'tree'的输出?

时间:2014-02-21 03:04:21

标签: bash tree

有没有办法使用bash或perl脚本打印ASCII字符'├──'和'└──'? 我希望它与'tree'的输出完全一样。

[root@localhost www]# tree -L 1
.
├── cgi-bin
├── error
├── html
└── icons

3 个答案:

答案 0 :(得分:3)

它们看起来是扩展的ascii代码的一部分。你可以在http://www.asciitable.com/

看到它们

此处也可在Unicode表格中找到:http://unicode-table.com/en/sections/box-drawing/

enter image description here

我相信你所追求的是192,195和196。 在Unicode 2501,2514和2523中。

修改

找到相关的堆栈问题here,建议使用Unicode进行打印。

  

你想要的是能够打印unicode,答案在perldoc perluniintro。   您可以使用\x{nnnn},其中n是十六进制标识符,或者您可以\N{...}使用名称:

perl -E 'say "\x{2514}"; use charnames; say "\N{BOX DRAWINGS LIGHT UP AND RIGHT}"'

答案 1 :(得分:2)

echo -e "\0342\0224\0224\0342\0224\0200\0342\0224\0200 \033[01"

答案 2 :(得分:2)

中使用 Unicode 特定字符

这里有超过 3 个不同的答案...

1.直接在 UTF8 脚本中使用特殊字符。

HorizT='├'
HLine='─'
echo $HorizT$HLine$HLine
├──

2.从输出样本

中查找字符值

当您说 tree 作为输出示例时,您可以运行类似

tree / | sed -ne '2{p;q}'
├── bin

tree / | sed -ne '2{p;q}' | od -An -t o1
342 224 234 342 224 200 342 224 200 040 142 151 156 012

将您的引用输出为八进制值。

知道 Unicode 使用可变数量的字节,您的参考字符串包含 3 个 unicode 字符,看起来像 3 组 3 个值,以 342 开头。

所以你可以试试:

printf "\342\224\234\n"
├

printf -v HorizontalT "\342\224\234"
printf -v Hline "\342\224\200"

echo $HorizontalT$Hline$Hline$Hline
├───

3.使用 charmap

搜索特定字符

您可以使用专用的 Unicode 浏览器,例如 Debian Gnome GNU/Linux 下的 charmap

GNOME Character Map

浏览并找到您的角色,然后在第二个标签上:Character Details

enter image description here

您可以阅读各种有用的表示 -> 八进制转义

printf '\342\224\234\n'
├

3+。使用 printf

打印 Unicode 字体

一旦您知道unicode 值,您就可以使用 printf 来创建变量:

printf -v char '\U251C'
echo $char
├

从那里开始,经过一些头脑风暴:

string=
for i in 0 2 16 24 {12..60..8} ;do
    printf -v r '\\U25%02X' $i
    printf -v char "$r"
    string+="$char "
done
echo "$string"
─ │ ┐ ┘ ┌ └ ├ ┤ ┬ ┴ ┼ 

string=
for i in {80..108} ;do
    printf -v r '\\U25%02X' $i
    printf -v char "$r"
    string+="$char "
done
echo "$string"
═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬