1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
查看文本文件内容 | ||
cat 查看文本内容 格式: cat [OPTION]... [FILE]... |
-E:显示行结束符$ -A:显示所有控制符 -n:对显示出的每一行进行编号 -b:非空行编号 -s:压缩连续的空行成一行 |
[root@rocky8 ~]# cat -n test.sh 1 #!/bin/bash 2 3 var() { 4 local var="$1" 5 echo "${!var}" 6 } 7 var 1 a |
nl 显示行号,相当于cat -b | -b a 无论是否是空行都列出行号 -b t 空行不列出行号(默认) -n ln 行号在显示栏的最左边显示且空行不列出行号 -n rn 行号在显示栏的最右边显示,且空行不列出行号,不填充0 -n rz 行号在显示栏的最右边显示,且加0 |
[root@rocky8 ~]# nl -b a test.txt 1 sdafd 2 dfd 3 123 4 dfgd 5 yyy |
tac 逆向显示文本内容 | -s:使用指定字符串代替换行作为分隔标志 两个文件内容合并成一个文件 tac a.txt b.txt > c.txt |
[root@rocky8 ~]# seq 5 | tac 5 4 3 2 1 |
rev 将同一行的内容逆向显示 | 反转日志文件中的后三行文本 #tail -n3 log.txt | rev |
[root@rocky8 ~]# echo "hello,world!" | rev !dlrow,olleh |
hexdump 查看非文本文件内容 | [root@rocky8 ~]# hexdump -C -n 512 /dev/sda 00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| |
[root@rocky8 ~]# echo {a..z} | tr -d ' '|hexdump -C 00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 |abcdefghijklmnop| 00000010 71 72 73 74 75 76 77 78 79 7a 0a |qrstuvwxyz.| 0000001b |
分页查看文件内容 | ||
more 可以实现分页查看文件,可以配合管道实现输出信息的分页 格式: more [OPTIONS...] FILE... |
-d:显示翻页及退出提示 | [root@rocky8 ~]# more /var/log/messages |
less 可以实现分页查看文件或STDIN输出,less命令是man命令使用的分页器 |
查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配 |
[root@rocky8 ~]# tree -d /etc |less │ └── conf.d ├── alternatives ├── anaconda │ ├── conf.d │ └── product.d ...省略... |
显示文本前面或后面的行内容 | ||
head 可以显示文件或标准输入的前面行 格式: head [OPTION]... [FILE]... |
-c # 指定获取前#字节 -n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前 -# 同上 |
[root@rocky8 ~]# head -n 3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin |
tail 和head相反,查看文件或标准输入的倒数行 格式: tail [OPTION]... [FILE]... |
-c # 指定获取后#字节 -n # 指定获取后#行,如果#是负数,表示从第#行开始到文件结束 -# 同上 -f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文件,将无法继续跟踪文件 -F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件 tailf 类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8已经无此工具 |
[root@rocky8 ~]# tail -n 3 a.txt 5 6 7 |
按列抽取文本 | ||
cut 命令可以提取文本文件或STDIN数据的指定列 格式: cut [OPTION]...[FILE]... |
-d DELIMITER: 指明分隔符,默认tab -f FILEDS: #: 第#个字段,例如:3 #,#[,#]:离散的多个字段,例如:1,3,6 #-#:连续的多个字段, 例如:1-6 混合使用:1-3,7 -c 按字符切割 --output-delimiter=STRING指定输出分隔符 |
[root@rocky8 ~]# ifconfig |head -n2 |tail -n1|cut -d" " -f10 192.168.31.23 |
合并多个文件 | ||
paste 合并多个文件同行号的列到一行 格式: paste [OPTION]...[FILE]... |
-d #分隔符:指定分隔符,默认用TAB -s #所有行合成一行显示 |
[root@rocky8 ~]# paste -d ":" a.txt b.txt 1:a 2:b 3:c 4:d 5:e 6: 7: |
分析文本的工具 | ||
wc命令可用于统计文件的行总数、单词总数、字节总数和字符总数;可以对文件或STDIN中的数据统计 | -l 只计数行数 -w 只计数单词总数 -c 只计数字节总数 -m 只计数字符总数 -L 显示文件中最长行的长度 |
[root@rocky8 ~]# wc a.txt 7 7 14 a.txt |
sort 文本排序,把整理过的文本显示在STDOUT,不改变原始文件 格式: sort [OPTION] file(s) |
-r 执行反方向(由上至下)整理 -R 随机排序 -n 执行按数字大小整理 -h 人类可读排序,如: 2K 1G -f 选项忽略(fold)字符串中的字符大小写 -u 选项(独特,unique),合并重复项,即去重 -t c 选项使用c做为字段界定符 -k # 选项按照使用c字符分隔的 # 列来整理能够使用多次 |
查看分区利用率最高值 [root@rocky8 ~]# df | tr -s ' ' '%'|cut -d% -f5|sort -nr|head -1 |
uniq命令从输入中删除前后相接的重复的行 格式: uniq [OPTION]... [FILE]... |
-c: 显示每行重复出现的次数 -d: 仅显示重复过的行 -u: 仅显示不曾重复的行 uniq常和sort 命令一起配合使用: sort userlist.txt | uniq -c |
取文件的共同行 [root@rocky8 ~]# cat a.txt b.txt | sort |uniq -d |
比较文件 | ||
diff命令比较两个文件之间的区别 | -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件 | [root@rocky8 ~]# diff a.txt b.txt 1c1 < 1 --- > 2 3c3 < e --- > c |
patch 复制在其它文件中进行的改变(要谨慎使用) | -b 选项来自动备份改变了的文件 | #若b.txt被删除了,可以通过a.txt和diff.log两个文件恢复 [21:29:49 zhu@rocky8 ~]$diff -u a.txt b.txt > diff.log [21:33:39 zhu@rocky8 ~]$rm -f b,txt [21:33:46 zhu@rocky8 ~]$patch -b a.txt diff.log patching file a.txt |
vimdiff 相当于vim -d | [21:35:27 zhu@roc |