Если вы используете tree -r
, затем переверните все строки, например, используя tac
, и преобразуйте прямоугольные символы, это выглядит разумным :
#!/bin/sh
tree --dirsfirst -r | tac | sed -e 's/\d226\d148\d148/\d226\d148\d140/'
# 0x2514 is lower-left-corner,
# 0x250c is upper-left-corner
# 0x2514: 9492 022424 0x2514 text "%\024" utf8 \342\224\224
# 0x250c: 9484 022414 0x250c text "%\014" utf8 \342\224\214
Я получил значение Unicode, используя идентификатор символа в vi-like-emacs , и эквивалент UTF-8, используя мою утилиту hex
.
Вот конец моего каталога / etc
, чтобы проиллюстрировать:
├── xdg
│ ┌── catalog
│ ├── catalog.old
│ ├── docbook-xml.xml
│ ├── docbook-xml.xml.old
│ ├── docbook-xsl.xml
│ ├── docbook-xsl.xml.old
│ ├── rarian-compat.xml
│ ├── sgml-data.xml
│ ├── sgml-data.xml.old
│ ├── xml-core.xml
│ ├── xml-core.xml.old
│ │ ┌── CatalogManager.properties
│ ├── resolver
├── xml
│ ┌── includes
│ ├── xpdfrc
├── xpdf
│ ┌── newuser.zshrc.recommended
│ ├── zlogin
│ ├── zlogout
│ ├── zprofile
│ ├── zshenv
│ ├── zshrc
├── zsh
.
Для справки:
Таблица кодировки UTF-8 и страница символов Unicode с кодовыми точками U + 2500 в U + 25FF
Тут вроде можно сделать:
tr -cd '0-9:_.,\r\n' < file.in > file.out
Чтобы удалить все символы, кроме тех, которые вы хотите сохранить, включая разделители строк в любом формате, в котором они были изначально.
Почему бы вам не избавиться от tr
и не включить его в команду sed
:
sed 's/\(^\|^M\)[^0-9:_.,]*/\n/g; s/^\n//' file
Может быть немного сложно включить управляющие символы (^M, \r, 0x0D )и (\n, 0x0A )в скрипт sed
, в зависимости от вашей ОС и sed
версии.