Đầu ra lệnh của cây Tree với đầu ra ASCII tinh khiết (7-bit)


44

Lệnh "cây" sử dụng các ký tự vẽ hình hộp đẹp để hiển thị cây nhưng tôi muốn sử dụng đầu ra trong ngữ cảnh "mã trung tính trang" (tôi biết rằng thực sự luôn có một trang mã, nhưng bằng cách giới hạn ở mức thấp hơn những nhân vật tôi hy vọng sẽ không còn lo lắng rằng ai đó ở Ulan Bator nhìn thấy những khuôn mặt cười, v.v.).

Ví dụ thay vì:

├── include
│   ├── foo
│   └── bar

Tôi muốn một cái gì đó như:

+-- include
|   +-- foo
|   \-- bar

nhưng không có kết hợp chuyển đổi "cây" nào tôi đã thử đưa ra điều này (có vẻ như họ lấy các ký tự vẽ hình hộp làm đường cơ sở và làm cho nó đẹp hơn)

Tôi cũng đã tìm kiếm các bộ lọc vẽ hộp để thực hiện các chuyển đổi như vậy mà không tìm thấy bất cứ thứ gì ngoài số lượng nghệ thuật ASCII vô hạn :-). Một bộ lọc chung có mùi giống như thứ gì đó sẽ được nấu chín trong 15 phút - cộng thêm hai ngày nữa vấp vào tất cả các trường hợp góc thú vị :-)


Cảm ơn câu hỏi. Tôi cần điều này để tôi có thể chuyển đầu ra của cây thành bản ghi để lấy contol của định dạng in (sử dụng dprint / dprintm từ gói duplexpr của tôi sourceforge.net/projects/duplexpr/. )
Joe

Câu trả lời:


59

Tôi không chắc về điều này nhưng tôi nghĩ tất cả những gì bạn cần là

tree | sed 's/├/\+/g; s/─/-/g; s/└/\\/g'

Ví dụ:

$ tree
.
├── file0
└── foo
    ├── bar
    │   └── file2
    └── file1

2 directories, 3 files
$ tree | sed 's/├/\+/g; s/─/-/g; s/└/\\/g'
.
+-- file0
\-- foo
    +-- bar
    │   \-- file2
    \-- file1

2 directories, 3 files

Ngoài ra, bạn có thể sử dụng --charsettùy chọn:

$ tree --charset=ascii
.
|-- file0
`-- foo
    |-- bar
    |   `-- file2
    `-- file1

2 directories, 3 files

Không có GNU tree, không có Unix tree, không có POSIX tree. Việc treethực hiện duy nhất tôi biết là mama.indstate.edu/users/ice/tree .
Stéphane Chazelas

3
@StephaneChazelas cảm ơn, vì vậy --charsettùy chọn nên luôn luôn có sẵn sau đó. Trả lời chỉnh sửa.
terdon

Lộng lẫy! (đặc biệt là phiên bản sed - đối với tôi sed là vùng đất hoang dã bên kia biên giới awk)
Tom Goodfellow

1
Tôi như cây --charset = tùy chọn ascii, nhờ
ling

4
Trên thực tế tôi nghĩ rằng --charsettùy chọn nên được đề cập trước tiên - cách sử dụng thay thế sedmang tính hướng dẫn, nhưng phức tạp hơn ...
rob74

30

Thế còn tree --charset unicode?

|-- boot_print
|   |-- config-2.6.32-5-amd64
|   |-- grub
|   |   |-- 915resolution.mod
|   |   |-- acpi.mod
|   |   |-- affs.mod
|   |   |-- afs_be.mod
|   |   |-- afs.mod
|   |   |-- aout.mod
|   |   |-- ata.mod
|   |   |-- ata_pthru.mod
|   |   |-- at_keyboard.mod
|   |   |-- befs_be.mod
|   |   |-- befs.mod
|   |   |-- biosdisk.mod
|   |   |-- bitmap.mod
|   |   |-- bitmap_scale.mod
|   |   |-- blocklist.mod
|   |   |-- boot.img

2
Điều đó giống nhưtree --charset nwildner
Stéphane Chazelas

Vâng Câu trả lời khác đã được chỉnh sửa vì vậy, tôi đã nhận thấy rằng @terdon đã đưa ra một câu trả lời đầy đủ hơn trong khi tôi đã viết của tôi;)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.