八个Linux文本处理小工具

1. Grep

grep 是行过滤工具,用于根据关键字进行过滤

1.1. 语法和选项
1.1.1. 语法
grep [选项] '关键字' 文件名
1.1.2. 常见选项

OPTIONS:
-[v] 查找不包含指定内容的行,反向选择
-[n] 显示行号
-[i] 不区分大小写
-[w] 按单词搜索
-[o] 打印匹配字
-[c] 统计匹配到的次数
-[r] 逐层遍历目录查找
-[A] 显示匹配行及后面多少行
-[B] 显示匹配行及前面多少行
-[C] 显示匹配行及前面和后面多少行

1.2. 学习示例

示例数据 passwd文件

# chen @ localhost in ~/Shell [16:33:50] C:1
$ cat -n  passwd          
     1	root:x:0:0:root:/root:/bin/zshi	
     2	b:in:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync	
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13	192.168.10.36
    14	
    15	
    16	1.1.125

1.2.1. 匹配 passwd 文件中以 adm 开头的数据,同时显示行号并且不区分大小写
# chen @ localhost in ~/Shell [16:28:04] 
$ grep -ni '^adm' passwd 
4:adm:x:3:4:adm:/var/adm:/sbin/nologin

1.2.2. 匹配 passwd 文件中以 nologin 结尾的数据,同时显示行号并且不区分大小写
# chen @ localhost in ~/Shell [16:28:29] C:1
$ grep -ni 'nologin$' passwd
2:b:in:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin


2. Cut

cut 是列截取工具

2.1. 语法和选项
2.1.1. 语法
cut [选项] 文件名
2.1.2. 常见选项

OPTIONS:
-[c] 以字符为单位进行分割
-[d] 自定义分隔符,默认制表符\t
-[f] 与-d一起使用,指定截取哪个区域

2.2. 学习示例
2.2.1. passwd 文件以 分割数据,截取第一列内容
# chen @ localhost in ~/Shell [16:33:57] 
$ cut -d: -f1 passwd 
root
b
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
192.168.10.36


1.1.125

2.2.2. passwd 文件以 分割数据,截取第1,6,7列内容
# chen @ localhost in ~/Shell [16:41:58] 
$ cut -d: -f1,6,7 passwd  
root:/root:/bin/zshi	
b:bin:/bin
daemon:/sbin:/sbin/nologin
adm:/var/adm:/sbin/nologin
lp:/var/spool/lpd:/sbin/nologin
sync:/sbin:/bin/sync	
shutdown:/sbin:/sbin/shutdown
halt:/sbin:/sbin/halt
mail:/var/spool/mail:/sbin/nologin
operator:/root:/sbin/nologin
games:/usr/games:/sbin/nologin
ftp:/var/ftp:/sbin/nologin
192.168.10.36



1.1.125

2.2.3. 匹配 passwd 文件中每行第四个字符
# chen @ localhost in ~/Shell [16:43:11] 
$ cut -c4 passwd        
t
n
m
:
x
c
t


2.2.4. 匹配 passwd 文件中每行第4-10个字符
# chen @ localhost in ~/Shell [16:46:19] 
$ cut -c4-10 passwd
t:x:0:0
n:x:1:1
mon:x:2
:x:3:4:
x:4:7:l
c:x:5:0
tdown:x
t:x:7:0
l:x:8:1
rator:x
es:x:12
:x:14:5
.168.10


.125

2.2.5. 从第5个字符开始截取后面所有的字符
# chen @ localhost in ~/Shell [16:47:52] 
$ cut -c5- passwd  
:x:0:0:root:/root:/bin/zshi	
:x:1:1:bin:/bin:/sbin/nologin
on:x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
:4:7:lp:/var/spool/lpd:/sbin/nologin
:x:5:0:sync:/sbin:/bin/sync	
down:x:6:0:shutdown:/sbin:/sbin/shutdown
:x:7:0:halt:/sbin:/sbin/halt
:x:8:12:mail:/var/spool/mail:/sbin/nologin
ator:x:11:0:operator:/root:/sbin/nologin
s:x:12:100:games:/usr/games:/sbin/nologin
x:14:50:FTP User:/var/ftp:/sbin/nologin
168.10.36


125



3. Sort

sort 工具用于排序,它将文件的每一行作为一个单位,从首字母向后,依次按ASCII 码的值进行比较,最后将它们按升序输出

3.1. 语法和选项
3.1.1. 语法
sort [选项] 文件名
3.1.2. 常见选项

OPTIONS:
-[u] 去除重复行
-[r] 降序排列,默认是升序
-[o] 将排序结果输出到文件中,类似重定向符号
-[n] 以数字排序,默认是按字符排序
-[t] 分隔符
-[k] 第N列
-[b] 忽视前导空格
-[R] 随机排序,每次运行的结果均不同

3.2. 学习示例
3.2.1. 按用户的 uid 进行降序排列,并将结果重定向到 id.txt 文件
# chen @ localhost in ~/Shell [17:12:21] 
$ sort -nr -t: -k3 passwd -o id.txt

# chen @ localhost in ~/Shell [17:12:34] 
$ cat -n id.txt
     1	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     2	sync:x:5:0:sync:/sbin:/bin/sync	
     3	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     6	root:x:0:0:root:/root:/bin/zshi	
     7	b:in:x:1:1:bin:/bin:/sbin/nologin




4. Uniq

uniq 用于去除连续重复

4.1. 语法和选项
4.1.1. 语法
uniq [选项] 文件名
4.1.2. 常见选项

OPTIONS:
-[i] 不区分大小写
-[c] 统计重复行次数
-[d] 只显示重复行

5. diff

diff 工具用于逐行比较文件的不同

注意: diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配

4.1. 语法和选项
4.1.1. 语法
diff [选项] 文件1 文件2
4.1.2. 常用选项

OPTIONS:
-[b] 不检查空格
-[B] 不检查空白行

4.2. 显示
4.2.1. 正常显示
# chen @ localhost in ~/Shell [17:17:15] 
$ cp ./passwd ./passwd2

# chen @ localhost in ~/Shell [17:26:50] 
$ ls
11.txt    id.txt  passwd2       shell-master.zip
hostname  passwd  shell-master  test.sh

# chen @ localhost in ~/Shell [17:27:02] 
$ vim passwd2 

# chen @ localhost in ~/Shell [17:27:25] 
$ diff passwd passwd2 
2,3c2,4 //第一个文件的第2,3行需要改变(c=change)才可以和第二个文件的第2到4行匹配
< b:in:x:1:1:bin:/bin:/sbin/nologin // '<' 表示第一个文件内容
< daemon:x:2:2:daemon:/sbin:/sbin/nologin 
---
> b:aa
> in:x:1:1:bin:/bin:/sbin/nologin //'>' 表示右边文件内容
> ddaemon:x:2:2:daemon:/sbin:/sbin/nologin
5d5 //第一个文件的第5行删除(d=delete)之后才能和第二个文件的第5行匹配
< lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

4.2.2. 合并格式显示
# chen @ localhost in ~/Shell [17:45:54] C:1
$ diff -u passwd passwd2
// 前两行主要列出比较的文件名和文件时间戳;文件名前的---表示 passwd,+++表示passwd2
--- passwd	2019-12-24 17:09:12.168212667 +0800
+++ passwd2	2019-12-24 17:41:55.850849538 +0800
@@ -1,7 +1,7 @@
 root:x:0:0:root:/root:/bin/zshi	
-b:in:x:1:1:bin:/bin:/sbin/nologin
-daemon:x:2:2:daemon:/sbin:/sbin/nologin
+b:aa
+in:x:1:1:bin:/bin:/sbin/nologin
+ddaemon:x:2:2:daemon:/sbin:/sbin/nologin
 adm:x:3:4:adm:/var/adm:/sbin/nologin
-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 sync:x:5:0:sync:/sbin:/bin/sync	

4.3. 比较两个目录不同

默认情况下也会比较两个目录里相同文件的内容

// 默认情况下也会比较两个目录相同文件的内容
# chen @ localhost in ~/Shell [10:28:11] 
$ diff dir1 dir2
只在 dir1 存在:test1
diff dir1/test10 dir2/test10
4d3
< 
只在 dir2 存在:test10
只在 dir2 存在:test12
只在 dir2 存在:test13
只在 dir2 存在:test14
// 如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容不同,加-q选项
# chen @ localhost in ~/Shell [10:29:03] C:1
$ diff -q dir1 dir2
只在 dir1 存在:test1
文件 dir1/test10 和 dir2/test10 不同
只在 dir2 存在:test10
只在 dir2 存在:test12
只在 dir2 存在:test13
只在 dir2 存在:test14

4.4.使用技巧

有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方较多时,我们可以通过打补丁的方式完成


**注: **该示例是将文件 passwd 内容修改为 passwd2 内容

//首先找出文件不同输出到新文件
-u: 上下文模式
-N:将不存在的文件视为空文件
# chen @ localhost in ~/Shell [8:55:32] 
$ diff -uN passwd passwd2 > passwd.patch 
# chen @ localhost in ~/Shell [8:57:44] 
$ patch passwd passwd.patch //将不同内容打补丁到文件
patching file passwd
// 测试验证
# chen @ localhost in ~/Shell [8:58:20] 
$ diff passwd passwd2



6. Paste

Linux paste 命令用于合并文件的列。
paste 指令会把每个文件以列对列的方式,一列列地加以合并。

6.1. 语法和选项
6.1.1. 语法
paste [OPTION]... [FILE]...
6.1.2. 常用选项

OPTIONS:
-[d] 用指定的间隔字符取代跳格字符。
-[s] 串行而非并行处理

6.2. 学习示例

合并文件file1、file2 、file3

# chen @ localhost in ~/Shell [10:20:21] 
$ cat -n file1
     1	name
     2	
     3	chen
     4	deng
     5	hello
# chen @ localhost in ~/Shell [10:20:25] 
$ cat -n file2
     1	address
     2	
     3	shanxi
     4	beijing
     5	shanghai
# chen @ localhost in ~/Shell [10:20:42] 
$ cat -n file3
     1	age
     2	
     3	13
     4	15
     5	16
# chen @ localhost in ~/Shell [10:19:37] 
$ paste file1 file2 file3 
name	address	age
		
chen	shanxi	13
deng	beijing	15
hello	shanghai	16


7. tr

tr 用于字符转换、替换和删除;主要用于删除文件中控制字符或进行字符转换

7.1. 语法和选项
7.1.1. 语法
// 用法1: 命令的执行结果交给 tr 处理.其中 str1 用于查询,str2 用于转换处理 
$ command | tr 'str1' 'str2'
// 用法2:tr 处理的内容来自文件, 使用"<" 标准输入
$ tr 'str1' 'str2' < filename
// 用法3:匹配 str1 进行相应的操作,如删除操作
$ tr [option] 'str1' < filename
7.1.2. 常用选项

OPTIONS:
- [d] 删除字符串1中所有输入字符
- [s] 删除所有重复出现字符序列,只保留第一个;即将重复出现的字符串压缩为一个字符串

7.1.3. 常匹配字符串
- a-z或[:lower:] 匹配所有小写字母
- A-Z或[:upper:] 匹配所有大写字母
- 0-9或[:digit:] 匹配所有数字
- [:alnum:] 匹配所有数字
- [:alpha:] 匹配所有字母
- [:blank:] 匹配所有水平空白
- [:punct:] 匹配所有标点符号
7.2. 学习示例
7.2.1 删除 passwd 文件中所有小写字母
# chen @ localhost in ~/Shell [9:46:01] 
$ tr -d 'a-z' < passwd
::0:0::/://	
:
::1:1::/://
::2:2::/://
::3:4:://://
::5:0::/://	
::6:0::/://


8. tee

tee 工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
命令tee与重定向的区别
重定向:读取的内容输出到指定文件中,在屏幕上并不显示
tee:在屏幕上显示的同时,将读取的内容也重定向到指定文件中

8.1. 语法和选项
8.1.1. 语法
tee [OPTION]... [FILE]...
8.1.2. 选项

-[a],将读取的内容追加到文件的后面(默认是覆盖)



9. 学习案例

9.1. 利用上面 8 个文本处理小工具获取 linux 主机 ipnet、 netmask、 broadcast,并且分行显示
# chen @ localhost in ~/Shell [9:54:12] C:1
$ ifconfig eth0 | grep broadcast
        inet 192.168.10.36  netmask 255.255.255.0  broadcast 192.168.10.255
# chen @ localhost in ~/Shell [9:54:20] 
$ ifconfig eth0 | grep broadcast | tr -d 'a-zA-Z'
         192.168.10.36   255.255.255.0   192.168.10.255
# chen @ localhost in ~/Shell [9:55:57] 
$ ifconfig eth0 | grep broadcast | tr -d 'a-zA-Z:' | tr ' ' '\n'









192.168.10.36


255.255.255.0


192.168.10.255
# chen @ localhost in ~/Shell [9:56:12] 
$ ifconfig eth0 | grep broadcast | tr -d 'a-zA-Z:' | tr ' ' '\n' | grep -v '^$'
192.168.10.36
255.255.255.0
192.168.10.255

9.2. 将系统中所有普通用户的用户名、家目录和默认 shell 保存到一个文件中,要求用户名和默认密码 shell 之间用 tab 分割
# chen @ localhost in ~/Shell [10:04:59] C:1
$ grep 'zsh$' /etc/passwd
root:x:0:0:root:/root:/bin/zsh
chen:x:1000:1000:chen:/home/chen:/bin/zsh
# chen @ localhost in ~/Shell [10:05:06] 
$ grep 'zsh$' /etc/passwd | grep -v '^root'
chen:x:1000:1000:chen:/home/chen:/bin/zsh

# chen @ localhost in ~/Shell [10:05:39] 
$ grep 'zsh$' /etc/passwd | grep -v '^root' | cut -d: -f1,6,7
chen:/home/chen:/bin/zsh
# chen @ localhost in ~/Shell [10:06:27] 
$ grep 'zsh$' /etc/passwd | grep -v '^root' | cut -d: -f1,6,7 | tr ':' '\t'
chen	/home/chen	/bin/zsh

# chen @ localhost in ~/Shell [10:07:16] 
$ grep 'zsh$' /etc/passwd | grep -v '^root' | cut -d: -f1,6,7 | tr ':' '\t' | tee users.txt
chen	/home/chen	/bin/zsh

# chen @ localhost in ~/Shell [10:07:43] 
$ cat users.txt 
chen	/home/chen	/bin/zsh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值