【四月更文打卡】Linux文本处理工具和正则表达式(上)

133 阅读2分钟

Linux文本处理工具和正则表达式

查看、截取和修改文本的工具

1.查看文本的工具

cat

  • 最常用的文件查看命令;当不指明文件或者文件名为一杠'-'时,读取标准输入。
cat [OPTION]... [FILE]...
-A:显示所有控制符(tab键:^I;行结束符:$)  
-E:显示行结束符$
-n:对显示出的每一行进行编号
-b:只对非空行进行编号
-s:压缩连续的空行成一行

more

  • 默认将多行文本满屏输出,只允许向文本末尾翻页(空格键满屏翻页;回车键单行翻页),阅读到文末自动退出。
  • 用法
more [options] file...
  • 一般使用管道传给more来阅读内容超过满屏的文本
cat big_file1 | more

less

  • 功能和more类似,但是允许向前和向后翻页,阅读到文本末尾不会自动退出。
  • 另外,less不必读取完整的文本,这使得其打开较大的文本文件时比vi等工具更具有速度优势。
  • 翻页快捷键
空格键向下满屏翻页
回车键单行向下翻页
k键单行向上
u键半屏向上
f键半屏向下
  • 向下的快捷键同样适用于more

nl

  • nl将文本文件传给标准输出,并添给每行文本加行号;当不指明文件或者文件名为一杠'-'时,读取标准输入。
  • 用法
nl [OPTION]... [FILE]...
    -i#   # 表示行号间隔#个数递增
  • 下面的用法只给带root的行加行号(匹配基本正则表达式)
nl -b, --body-numbering=pBRE file             # BRE 表示基本正则表达式
nl --body-numbering=proot /etc/passwd

tac

  • cat 的反用,最后一行先显示;当不指明文件或者文件名为一杠'-'时,读取标准输入。

rev

  • rev读取指定的文件,倒序每行的字符,输出到标准输出;如果不指定文件,读取标准输入。
[root@centos8 ~]$ rev
hello    # 输入
olleh    # 输出
howdy    # 输入
ydwoh    # 输出

2.查看非文本文件的工具

hexdump

  • hexdump 将文件内容以ascii字符, decimal十进制, hexadecimal十六进制, 或者octal八进制显示在标准输出。
  • 用法
 hexdump [options] file [...]
    -C # 大写C字母表示按照标准的16进制ASCII码显示文件内容
    -n length # 只显示前n字节的内容
    -s offset # 跳过文件内容的前offset个字节显示
注:length和offset的格式为:1KiB=1024字节;1MiB=1024KiB;... 或者:1KB=1000字节;1MB=1000KB...
也就是说下面的写法等价:
[root@centos8 /data]$ hexdump -C -n 1KiB /dev/nvme0n1 | wc -l
56                                  ^^^^
[root@centos8 /data]$ hexdump -C -n 1024 /dev/nvme0n1 | wc -l
56                                  ^^^^
##################################
[root@centos8 /data]$ hexdump -C -n 1KiB /dev/nvme0n1 | tail -n3
000003f0  00 00 00 00 02 00 00 00  00 00 00 00 77 00 20 08  |............w. .|
00000400
[root@centos8 /data]$ hexdump -C -n 1024 /dev/nvme0n1 | tail -n3
000003f0  00 00 00 00 02 00 00 00  00 00 00 00 77 00 20 08  |............w. .|
00000400
##################################
[root@centos8 /data]$hexdump -C -n 1KB /dev/nvme0n1 | tail -n3
*                                  ^^^
000003e0  00 00 00 00 00 00 00 00                           |........|
000003e8
[root@centos8 /data]$hexdump -C -n 1000 /dev/nvme0n1 | tail -n3  
*                                  ^^^^
000003e0  00 00 00 00 00 00 00 00                           |........|
000003e8