【问题标题】:How get ASCII characters similar to output of the linux command 'tree'?如何获得类似于 linux 命令“树”的输出的 ASCII 字符?
【发布时间】:2014-02-21 03:04:21
【问题描述】:

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

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

【问题讨论】:

    标签: bash tree


    【解决方案1】:

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

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

    我相信 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}"'
    

    【讨论】:

    • asciitable.com 是我一直以来最喜欢的网站
    【解决方案2】:
    echo -e "\0342\0224\0224\0342\0224\0200\0342\0224\0200 \033[01"
    

    【讨论】:

    • 谢谢。这对我有用,我得到了字符'└──'。但是我如何打印'├──'?
    • echo -e "\0342\0224\0234\0342\0224\0200\0342\0224\0200"
    【解决方案3】:

    中使用 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

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

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

    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"
    ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2011-05-21
      相关资源
      最近更新 更多