has*_*san 47 linux shell scripting
我们想删除 ^[所有的转义序列.
sed不工作,并给我们这个错误:
$ sed 's/^[//g' oldfile > newfile; mv newfile oldfile;
sed: -e expression #1, char 7: unterminated `s' command
$ sed -i '' -e 's/^[//g' somefile
sed: -e expression #1, char 7: unterminated `s' command
Run Code Online (Sandbox Code Playgroud)
seh*_*ehe 47
你在寻找ansifilter吗?
你可以做两件事:输入文字转义(在bash :)
使用键盘输入:
sed 's/Ctrl-vEsc//g'Run Code Online (Sandbox Code Playgroud)
或者
sed 's/Ctrl-vCtrl-[//g'Run Code Online (Sandbox Code Playgroud)
或者你可以使用字符转义:
sed 's/\x1b//g'
Run Code Online (Sandbox Code Playgroud)
或者对于所有控制字符:
sed 's/[\x01-\x1F\x7F]//g' # NOTE: zaps TAB character too!
Run Code Online (Sandbox Code Playgroud)
Tom*_*ale 22
commandlinefu给出了正确的答案,它可以删除ANSI颜色以及移动命令:
Run Code Online (Sandbox Code Playgroud)sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"
Luk*_*e H 17
为了我的目的,我管理了以下内容,但这并不包括所有可能的ANSI转义:
sed -r s/\x1b\[[0-9;]*m?//g
Run Code Online (Sandbox Code Playgroud)
这将删除m命令,但对于所有转义(由@lethalman评论),使用:
sed -r s/\x1b\[[^@-~]*[@-~]//g
Run Code Online (Sandbox Code Playgroud)
另请参阅" Python正则表达式以匹配VT100转义序列 ".
还有一个常见的转义序列表.
小智 10
ansi2txt命令(kbtin包的一部分)似乎在Ubuntu上完美地完成了这项工作.
在寻找一种从手册页中删除额外格式的方法时,我偶然发现了这篇文章.ansifilter做到了,但它远远不是想要的结果(例如所有以前粗体的字符都是重复的,比如SSYYNNOOPPSSIISS).
对于该任务,正确的命令将是col -bx,例如:
groff -man -Tascii fopen.3 | col -bx > fopen.3.txt
Run Code Online (Sandbox Code Playgroud)
小智 7
我没有足够的声誉为Luke H给出的答案添加评论,但我确实想分享我一直用来消除所有 ASCII 转义序列的正则表达式。
sed -r 's~\x01?(\x1B\(B)?\x1B\[([0-9;]*)?[JKmsu]\x02?~~g'
Run Code Online (Sandbox Code Playgroud)
我为此构建了vtclean 。它按顺序使用这些正则表达式去除转义序列(在regex.txt中解释):
// handles long-form RGB codes
^\033](\d+);([^\033]+)\033\\
// excludes non-movement/color codes
^\033(\[[^a-zA-Z0-9@\?]+|[\(\)]).
// parses movement and color codes
^\033([\[\]]([\d\?]+)?(;[\d\?]+)*)?(.)`)
Run Code Online (Sandbox Code Playgroud)
它还执行基本的行编辑模拟,因此可以解析退格键和其他移动字符(如左箭头键)。
小智 5
您可以使用以下方法删除所有不可打印的字符:
sed 's/[^[:print:]]//g'
| 归档时间: |
|
| 查看次数: |
39740 次 |
| 最近记录: |