Bash 使用转义序列渲染文本(如终端) 嗨,我正在寻找一些库或工具来渲染文本文件中带有转义序列字符的文本。我不知道怎么称呼它,但这里有一个例子:

Bash 使用转义序列渲染文本(如终端) 嗨,我正在寻找一些库或工具来渲染文本文件中带有转义序列字符的文本。我不知道怎么称呼它,但这里有一个例子:,bash,text,terminal,render,vi,Bash,Text,Terminal,Render,Vi,我在屏幕上看到了abc^Kdef 因此,我正在搜索一些可以为我做到这一点的工具: ~$ sometool /tmp/xxxxx > /tmp/yyyyy ~$ vi /tmp/yyyyy I can get abc def 在vi窗口中 \v只是一个例子,我需要转换\v、\b、\f等 致哈里斯基: 但我想要的是: $~/:sometool /tmp/xxxxx > /tmp/yyyyy 用python >>> f=open('/tmp/yyyyyy')

我在屏幕上看到了abc^Kdef

因此,我正在搜索一些可以为我做到这一点的工具:

~$ sometool /tmp/xxxxx > /tmp/yyyyy
~$ vi /tmp/yyyyy
I can get 

abc
   def
在vi窗口中

\v只是一个例子,我需要转换\v、\b、\f等

致哈里斯基: 但我想要的是:

$~/:sometool /tmp/xxxxx > /tmp/yyyyy
用python

>>> f=open('/tmp/yyyyyy').readlines()
>>> f[0]
>>> ['abc\n   def']

它在\n和def之间有三个空格

shell中的字符\v在每个编辑器/工具中的表示方式不同。如果你做了一个猫的文件,你仍然得到你需要的

$ cat /tmp/xxxxx
abc
   def
$
如果用python打开同一个文件,将看到字符\x0b。但是当你把它打印出来的时候,它是好的

>>> f=open('/tmp/se').readlines()
>>> f[0]
['abc\x0bdef\n']
>>> print f[0]
abc
   def

基本上,这是一个代表性问题。如果您的要求是使用程序或工具读取文件,则表示应该不会有问题。

shell中的字符\v在每个编辑器/工具中的表示方式都不同。如果你做了一个猫的文件,你仍然得到你需要的

$ cat /tmp/xxxxx
abc
   def
$
如果用python打开同一个文件,将看到字符\x0b。但是当你把它打印出来的时候,它是好的

>>> f=open('/tmp/se').readlines()
>>> f[0]
['abc\x0bdef\n']
>>> print f[0]
abc
   def

基本上,这是一个代表性问题。如果您的要求是使用程序或工具读取文件,那么表示应该没有问题。

不要认为我完全理解这个问题,但是
od
会有帮助吗

例如:

$ echo -e "abc\vdef" > temp $ cat temp abcdef $ od -c temp 0000000 a b c \v d e f \n 0000010 $echo-e“abc\vdef”>温度 $cat临时工 abcdef $od-c温度 0000000 a b c\v d e f\n 0000010
如果您想清理它,您可以通过sed来传递输出。就像我说的,我不确定你在问什么。

我不认为我完全理解这个问题,但是
od
会有帮助吗

例如:

$ echo -e "abc\vdef" > temp $ cat temp abcdef $ od -c temp 0000000 a b c \v d e f \n 0000010 $echo-e“abc\vdef”>温度 $cat临时工 abcdef $od-c温度 0000000 a b c\v d e f\n 0000010
如果您想清理它,您可以通过sed来传递输出。正如我所说的,我不确定这是你要问的。

使用sed进行清洁不会起作用,因为终端顺序可能非常复杂,例如清除屏幕、退格等。这就是od的作用。根据选项的不同,od将以
\f
\b
FF
BS
的形式显示清除屏幕或退格。我只是建议将sed用于格式化
od
的输出。我不想只删除特殊的控制序列,我想解释它们(请参阅所有用例)。使用sed清理不会起作用,因为终端序列可能非常复杂,例如清除屏幕、退格等。这就是od的作用。根据选项的不同,od将以
\f
\b
FF
BS
的形式显示清除屏幕或退格。我只是建议将sed用于格式化
od
的输出。我不想只删除特殊的控制序列,我想解释它们(参见所有用例)。打印是不够的,因为转义序列仍然在输出中(即使它们被隐藏):例如,我想在终端日志中搜索一个字符串,只搜索实际显示的字符串,例如:
$script terminal\u log.txt>>登录到terminal\u log.txt$echo barfoo>>foo$cat terminal\u log.txt | grep bar | wc-l>>1
自从删除了bar之后,我希望是0而不是1。(很抱歉格式化,但是stackoverflow不允许在注释中换行)打印是不够的,因为转义序列仍然在输出中(即使它们是隐藏的):例如,我想在终端日志中搜索字符串,只搜索实际显示的字符串,例如:
$script terminal_log.txt>>登录到terminal_log.txt$echo barfoo>>foo$cat terminal_log.txt | grep bar | wc-l>>1
自从删除了条后,我希望是0而不是1。(很抱歉格式化,但是stackoverflow不允许在注释中换行)