linux学习--简单的文本处理工具

Posted 落阳٩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习--简单的文本处理工具相关的知识,希望对你有一定的参考价值。

文本处理工具

查看文本内容

cat

语法

cat [OPTION]... [FILE]...

选项

-E:显示行结束符$
-A:显示所有控制符
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行

分页查看文件内容

more

语法

more [OPTIONS...] FILE...

选项

-d: 显示翻页及退出提示

less

语法

less FILE...

/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配

显示文本前内容

head

语法

head [OPTION]... [FILE]...

选项

-c # 指定获取前#字节
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
-# 同上

显示文本后内容

tail

语法

tail [OPTION]... [FILE]...

选项

-c # 指定获取后#字节
-n # 指定获取后#行,如果#是负数,表示从第#行开始到文件结束
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新
建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文
件
tailf 类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8无此工具

提取文本内容

cut

语法

cut [OPTION]... [FILE]...

选项

-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段,例如:3
#,#[,#]:离散的多个字段,例如:1,3,6
#-#:连续的多个字段, 例如:1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符

合并文件

paste

语法

paste [OPTION]... [FILE]...

选项

-d #分隔符:指定分隔符,默认用TAB
-s #所有行合成一行显示

例,批量修改口令

[root@centos8 ~]#cat user.txt
wang
mage
[root@centos8 ~]#cat pass.txt
123456
magedu
[root@centos8 ~]#paste -d: user.txt pass.txt
wang:123456
mage:magedu
[root@centos8 ~]#paste -d: user.txt pass.txt|chpasswd

文本数据统计

wc

选项

-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

文本排序

sort

语法

sort [options] file(s)

选项

-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序,如: 2K 1G
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),合并重复项,即去重
-t c 选项使用c做为字段界定符
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次

面试题:有两个文件,a.txt与b.txt ,合并两个文件,并输出时确保每个数字也唯一

[root@localhost date]# sort -u a.txt b.txt 
1
2
3
4
5
6
7
8
[root@localhost date]# sort a.txt b.txt | uniq 
1
2
3
4
5
6
7
8

去重

uniq

语法

uniq [OPTION]... [FILE]...

选项

-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

文本比较

diff

格式

-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

[root@localhost date]# diff a.txt b.txt 
3a4,8
> 4
> 5
> 6
> 7
> 8
[root@localhost date]# diff -u a.txt b.txt 
--- a.txt   2021-11-29 04:00:23.348423156 -0500
+++ b.txt   2021-11-29 04:00:29.786474146 -0500
@@ -1,3 +1,8 @@
 1
 2
 3
+4
+5
+6
+7
+8

练习

1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址

[root@localhost date]# ifconfig ens160 |grep -o -E [0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+|head -1
192.168.1.44
[root@localhost date]# 

2、查出分区空间使用率的最大百分比值

[root@localhost date]# df | grep -Eo [0-9]+%|sort -nr|head -1
17%

3、查出用户UID最大值的用户名、UID及shell类型

[root@localhost date]# cat /etc/passwd | tail -1|cut -d : -f1,3,7

4、查出/tmp的权限,以数字方式显示

[root@localhost date]# stat /tmp | grep -E Uid|tr -s "(/" " "|cut -d " " -f2
1777
[root@localhost date]#stat /tmp | grep -E ^Access|head -1|tr -s "(/" " "|cut -d " " -f2

5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

[root@localhost date]# netstat -t | grep ssh\\>|tr -s ":" " " |cut -d " " -f6 |uniq -c |sort -nr

以上是关于linux学习--简单的文本处理工具的主要内容,如果未能解决你的问题,请参考以下文章

linux下几种常用的文本处理工具

linux学习-文本处理工具sed

Linux文本处理工具简单使用

Linux awk工具简单学习记录

Linux学习笔记 第八章 文本处理工具与正则表达式

Linux学习第七课-文本处理工具及正则表达式