AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 418157
Accepted
Freedo
Freedo
Asked: 2018-01-19 21:33:54 +0800 CST2018-01-19 21:33:54 +0800 CST 2018-01-19 21:33:54 +0800 CST

使用 grep 时屏幕上出现奇怪的符号?

  • 772

./trans ... 显示转义码的命令输出

知道是什么原因造成的吗?如果不使用 grep,则显示的唯一内容是 ISO 代码和空白区域。

使用的软件

命令:./trans --id --input /path/to/txt | grep ISO | grep [a-z]

root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'

正常输出:

带有可读文本和 URL 的 trans 命令输出

grep terminal
  • 1 1 个回答
  • 2797 Views

1 个回答

  • Voted
  1. Best Answer
    Michael Homer
    2018-01-19T22:56:49+08:002018-01-19T22:56:49+08:00

    屏幕截图似乎显示了损坏的ANSI 颜色代码,这些代码控制文本渲染。粗体/明亮的文本是由序列生成的␛[1m,通常由您的终端解释而不直接显示在屏幕上:它只是使下一个文本变亮。un grepped 输出的屏幕截图显示每行上的标签和值之间的颜色差异,因此原始输出正在使用它们。

    看来该序列已被您的 final 打破grep,它与代码中的“m”匹配(因为它是一个 letter [a-z])并试图用红色突出显示它本身。这留下了部分转义序列,您的终端无法处理。

    转义字符␛是 U+001B,它是在未知字符框中呈现的十六进制数字。显示的是转义符(框)、a [、a 1、a 红色,m后跟预期的匹配文本“eng”,以及在末尾出现的“22”(“正常颜色和强度”的数字代码)。


    损坏的输出实际上是:

    ␛[1 ␛[31m萌␛[22m ␛[22 ␛[31m m ␛[22m 

    where␛[31m使文本变为红色并将␛[22m其变回白色,两者都grep在字符周围插入m到原始文本中。原来只是:

     ␛[1m英␛ [22m 

    这只是明亮的“ eng”,然后切换回普通文本。

    您可以通过将 final 更改grep为grep --color=always并将管道更改为 来检查这一点hexdump,这将显示所有不可打印的字符和终端解释的字符。


    你可以通过几种方式来处理这个问题。一种是grep暂时不使用别名:

    ./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
    

    反斜杠暂时跳过别名grep直接运行。

    另一个是从原始命令中去除 ANSI 代码,对此问题有一些建议:

    ./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
    

    另一种选择是在末端添加一个无关的管道:

    ./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
    

    因为 finalgrep的输出不是直接到 TTY,而是cat通过管道,所以它不会插入彩色突出显示。

    也许最好的选择是让 Translate Shell 停止在其自己的输出中使用终端控制序列,而不是终端。这将适当地涉及您向其作者提交的错误报告以及对 Translate Shellansi()功能的代码修复,但人们可能会有些犹豫:

    TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
    

    这通过了dumbTranslate Shell 环境中的终端类型,它至少识别为不支持 ECMA-48 颜色。(遗憾的是,Translate Shell 不使用 terminfo,只是在自己的代码中硬连线了它理解的终端类型和它使用的控制序列。)

    • 28

相关问题

  • 如何在 ssh 上运行一瞥?

  • 备份 Nand Flash 存储区

  • 命令 ls | grep 只显示目录(当它也应该显示文件时)

  • grep 什么时候计数,什么时候不计数

  • grep --line-buffered 直到 X 行?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve