Linux中文本处理命令
一、grep
1.过滤
ps -ef | grep linux
2.筛选工具
1.查询/etc/passwd文件中包含root的行
grep root passwd
2.查询包含root的行,并使关键词显色
grep --color=auto root passwd
3.查询/etc/passwd文件中包含root的行并显示行号
grep -n root passwd
4.查询/etc/passwd文件中包含root的行,显示行号,并且忽略大小写
grep -ni root passwd
5.查询以root开头的行
grep -ni ^root passwd
6.查询以root结尾的行
grep -ni root$ passwd
7.查询不宜root开头的行,(-v:表示取反)
grep -niv ^root passwd
(参数 -A:after, -B:before, -C:context,前后文)
8.查询以ftp开头的行及其后三行 
grep -nA 3 ftp passwd 
9.查询以ftp开头的行及其前三行
grep -nB 3 ftp passwd
10.查询以ftp开头的行及其前后三行
grep -nC 3 ftp passwd
11.显示没有空行的文件内容
grep -v ^$ filename
二、cut
cut是列截取命令
1.语法和选项
cut [选项] 文件名
-c:以字符为单位进行分割,截取
-d:自定义分隔符,默认为制表符\t
-f:与-d一起使用,指定截取哪个区域
2.用例
1.截取第一列数据
cut -d: -f1 passwd
2.截取头十行第一列和第七列的数据
cut -d: -f1,7 passwd | head
3.截取每行前5个字符
cut -c1-5 passwd
4.截取每行第10个字符及以后内容
cut -c10- passwd
5.截取每行第5到第10个字符
cut -c5-10 passwd
小练习
用grep和cut列出当前系统的运行级别
1.如何查看系统运行级别
- 
命令 runlevel 
- 
文件 /etc/inittab(ContOS7中该文件没有可修改内容) 

1.截取结果的第三个字符 
runlevel | cut -c3
2. 以空格分割结果,区第二列
runlevel | cut -d ' ' -f2
3.获取不已#开头的数据,以冒号分割,去第二列
grep -v ^# /etc/inittab | cut -d: -f2
4.获取以id开头的数据,以冒号分割,取第二列
grep ^id /etc/inittab | cut -d: -f2
5.获取以"initdefault:"结尾的数据,取第4个字符
grep initdefault:$ /etc/inittab | cut -c4
6.获取每行第4个字符,查看最后一行
cut -c4 /etc/inittab | tail -1
三、sort
sort用于排序,它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将它们按升序输出
1.语法和选项
-u:去除重复行
-r:降序排列,默认是升序
-o:将排序结果输出到文件中,类似重定向符号">"
-n:以数字排序,默认是按字符排序
-t:分隔符
-k:第N列
-b:忽略前导空格
-R:随机排序,每次运行的结果均不同
1.数字排列以冒号分割的第三列数据
sort -n -t: -k3 passwd
2.数字排列以冒号分割的第三列数据,降序输出
sort -nr -t: -k3 passwd
3.数字排列以冒号分割的第三列数据,降序输出到1.txt文件中
sort -nr -t: -k3 passwd -o 1.txt
4.去重文件1.txt
sort -u 1.txt
四、uniq
uniq用于去除连续的重复行
1.常用选项
-i:忽略大小写
-c:统计重复行次数
-d:只显示重复行
tee是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
1.选项
-a:双向追加重定向
1.屏幕打印hello并输入到1.txt文件
echo hello | tee 1.txt
2.屏幕打印hello word并覆盖到1.txt文件
echo hello world | tee 1.txt
3.屏幕打印HELLO并追加到1.txt文件
echo HELLO | tee -a 1.txt
六、diff
diff工具用于逐行比较文件的不同
注意:diff描述两个文件不同的方式是,怎样改变第一个文件之后与第二个文件匹配
1.语法和选项
diff [选项] 文件1 文件2
-b 不检查空格
-B             不检查空白行
-i             不检查大小写  
-W             忽略所有的空格 
--normal       正常格式显示(默认)
-c             上下文格式显示 
-u             合并格式显示
2.用例
1.准备文件
[root@shell test]# cat file1
aaaa
111
hello world
222
333
bbb
[root@shell test]# 
[root@shell test]# cat file2
aaa
hello
111
222
bbb
333
world
[root@shell test]# diff file1 file2
1c1,2     第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到第2行匹配
< aaaa    小于号"<"表示左边文件(file1)文件内容
---       ---表示分隔符
> aaa     大于号">"表示右边文件(file2)文件内容
> hello
3d3       第一个文件第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4       第一个文件第5行删除(d=delete)后才能和第二个文件的第4行匹配
< 333
6a6,7     第一个文件第6行增加(a=add)内容后才能和第二个文件的第6到第7行匹配
> 333     需要增加的内容在第二个文件里是333和world
> world
[root@shell test]# diff -c file1 file2
前两行比较文件名和时间戳,***表示file1,---表示file2
*** file1	2022-02-23 14:54:24.365107949 +0800
--- file2	2022-02-23 14:54:57.625110667 +0800
***************   表示分隔符
*** 1,6 ****      file1的1到6行
! aaaa            !表示该行需要修改才与第二个文件匹配
  111
- hello world     -表示该行需要删除才与第二个文件匹配
  222
- 333             -表示该行需要删除才与第二个文件匹配 
  bbb
--- 1,7 ----
! aaa             表示第一个文件需要修改才与第二个文件匹配
! hello           表示第一个文件需要修改才与第二个文件匹配
  111
  222
  bbb
+ 333             表示第一个文件需要增加该行才与第二个文件匹配
+ world           表示第一个文件需要增加该行才与第二个文件匹配
[root@shell test]# diff -u file1 file2
--- file1	2022-02-23 14:54:24.365107949 +0800
+++ file2	2022-02-23 14:54:57.625110667 +0800
@@ -1,6 +1,7 @@
-aaaa            file1删除该行
+aaa             file1增加该行
+hello           file1增加该行
 111 
-hello world     file1删除该行
 222
-333             file1删除该行 
 bbb
+333             file1增加该行
+world           file1增加该行
1.先找出文件的不同,然后输出到一个文件
diff -u file1 file2 > file.patch
2.将不同内容打补丁到文件
patch file1 file.patch
3.测试验证
diff file1 file2
七、paste
用于合并文件行,不更改原文件
1.常用选项
-d:自定义间隔符,默认是tab
-s:串行处理,非并行
[root@shell test]# cat -n file1
     1	hello world
     2	8888
[root@shell test]# cat -n file2
     1	heima itcast
     2	999
     3	oooo
1.无选项
[root@shell test]# paste file1 file2
hello world	heima itcast
8888	999
	oooo
2.-d
[root@shell test]# paste -d: file1 file2
hello world:heima itcast
8888:999
:oooo
3.-s
[root@shell test]# paste -s file1 file2
hello world	8888
heima itcast	999	oooo
tr用于字符转换、替换和删除,主要用于删除文件中控制字符或进行字符转换
注意:文件内容不发生改变
1.语法选项
语法:
	用法1:命令执行结果交予tr处理,str1用于查询,str2用于转换处理
	commands | tr 'str1' 'str2'
	用法2:tr处理的内容来自文件,需要使用"<"标准输入
	tr 'str1' 'str2' < filename
	用法3:匹配str1进行删除操作
	tr options 'str1' < filename
	
选项:
	-d:删除str1中所有输入字符
	-s:删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
1.将1.txt文件中的小写字母换成大写字母
tr a-z A-Z < 1.txt
2.将1.txt文件中所有数字替换成@符号
tr 0-9 @ < 1.txt
3.将1.txt文件中的":"和"/"替换成"#"
tr ':/' '#' < 1.txt
4.去除文件中的小写字母
tr -d a-z < 1.txt
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号