当前位置: 首页 > news >正文

如何查看某个文件中的特殊符号

Q:如何查看某个文件中的特殊符号,比如说是换行符之类的转义字符?

1,法1:使用cat -A

cat -A filename

可以看到-A本质上就是-vET,也就是

展示所有的字符,-v是显示非打印字符,这个需要回顾一下ASCII码的知识了,因为有很多字符可以用ASCII码表示,但是没法直接打印显示出来;

参考:https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

可显示字符编号范围是32-126(0x20-0x7E),共95个字符:

ASCII控制字符的编号范围是0-31和127(0x00-0x1F和0x7F),共33个字符:

当然这里扯到了字符编码的计算机的一些基本常识,ASCII编码肯定是不够的,我们还有unicode编码,顾名思义uniform也就是统一的、unique唯一的,基本上是百科全书式的,

当然编码只是第1个问题,我们有了世界上任意国家任意语言任意字符的1个统一标准的编码,那么我们人是能够识别的,但是计算机呢?

所以第2个问题就是如何在计算机上存储的问题,也就是计算机识别的问题?

相当于我们有了字典,但是我们需要在计算机上去实现这个字典。

所以我们经常提到的UTF-8编码方式,本质上是对Unicode编码格式的一种计算机实现;

“-v, --show-nonprinting”是一个命令行选项,用于显示非打印字符。具体解释如下:

  1. -v:这是该选项的短格式,用于在命令行中快速指定该功能。
  2. –show-nonprinting:这是该选项的长格式,提供了更清晰的描述,表明其功能是显示非打印字符。
  3. use ^ and M- notation:表示非打印字符的符号,如“^A”表示ASCII码为1的字符;“M-”通常用来表示带有Meta键修饰的字符,比如“M-a”可能表示某个特定的控制字符。
  4. except for LFD and TAB:表示除了换行符(LFD,Line Feed)和制表符(TAB)之外。也就是说,换行符和制表符不会使用上述的“^”和“M-”符号来表示,而是会以它们原本的显示方式呈现。

回过来,-E类似于换行符的提醒功能,但是不换行,只是展示EOF类似,end of line,EOL之类;

然后就是制表符的打印

比如说我通过使vim新建了1个文本字符文件,

然后使用

事实上我只能看到每行在哪里结束,这其实和直接打印出内容没有区别,都是一目了然的效果;

2,法2:使用od(八进制/十六进制查看)

本质上是一个读取文件内容,再以八进制格式输出的命令

od -c filename

现在我们能够看到换行符

参考:https://www.runoob.com/linux/linux-comm-od.html

3,使用 hexdump

因为字符编码是本质,所以查看任意文件内容,花样或者说核心就在于查看文件的字符格式,

比如说用多进制格式来查看

hexdump -C filename

我们能够查看十六进制以及相应地ASCII码,

事实上我们可以看到ASCII码中:
以最后一行为例:
79是y,20是空格space,7a是z,0a是换行符

参考:https://www.linuxcool.com/hexdump

4,使用vi或vim+特殊模式(mode)

可以看到换行符的展示:

只是符号形式的展示,不是编码本质的展示

5,使用sed或者awk文本处理命令:

sed -n l filename

l 命令会将不可见字符显示为可见形式

如果是使用awk的话,可以取出每一行,然后定义1个ord函数,用于读取每一个字符的unicode字符(基础python中的ord以及chr字符函数等),这样我就可以查看每一行具体的字符形式,包括其中的特殊字符。

当然,如果使用ord的话,需要自己自己能够识别unicode字符编码中哪些码值对应特殊的字符。

awk '{for(i=1;i<=length($0);i++) printf "%d ", ord(substr($0,i,1)); print ""}' filename# 上面的ord函数只是1个idea,需要自己定义,可以使用python等		

相关文章:

  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?
  • 【前端基础】8、CSS的选择器
  • Jquery ajax 提交序列化或JSON数据到后台
  • LeetCode算法题(Go语言实现)_61
  • 基于大数据分析的Facebook隐私保护策略
  • 全球电商新势力崛起:拆解Coupang的“韩国速度“与未来棋局
  • ESP32开发之freeRTOS的互斥量
  • C++:扫雷游戏
  • MCP vs Function Call:AI交互的USB-C革命
  • Python实现文件批量改名功能
  • MySQL中隔离级别那点事
  • rom定制系列------红米note12 5G版miui14修改型号root版 原生安卓14批量线刷固件 原生安卓15等
  • 【MySQL】存储引擎 - CSV详解
  • @AutoConfigureBefore功能简介-笔记
  • Windows系统下使用Kafka和Zookeeper,Python运行kafka(一)
  • Java 基础知识点——数组相关
  • [java八股文][Java并发编程面试篇]场景
  • 自研MCU芯片闪存驱动的实现:OpenOCD详细过程记录与操作指南
  • 关于vue-office在vue3工程中的引用报错问题
  • 京东京言-AI项目实现逻辑
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁
  • 成都公积金新政征求意见:购买保障性住房最高贷款额度上浮50%
  • 美联储主席:美联储工作方式不会受特朗普影响,从未寻求与总统会面
  • 60岁济南石化设计院党总支书记、应急管理专家李有臣病逝
  • 象屿集团:对去化压力大、市场有效需求不足区域坚决暂停投资,打造多元上市路径
  • 法国宣布投资1亿欧元吸引外国科研人员