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中该文件没有可修改内容)

 

 

2.如何过滤运行级别

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:随机排序,每次运行的结果均不同

2.用例

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

tee是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)

1.选项

-a:双向追加重定向

2.用例

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

2.正常模式显示

[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

3.上下文模式显示

[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 表示第一个文件需要增加该行才与第二个文件匹配

4.合并模式显示

[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增加该行

5.比较两个目录不同

diff -q dir1 dir2

6.其他技巧

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

1.先找出文件的不同,然后输出到一个文件
diff -u file1 file2 > file.patch

2.将不同内容打补丁到文件
patch file1 file.patch

3.测试验证
diff file1 file2

 

七、paste

用于合并文件行,不更改原文件

1.常用选项

-d:自定义间隔符,默认是tab
-s:串行处理,非并行

2.用例

[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

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:删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串

2.用例

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

 

posted @ 2022-03-01 14:42    阅读(948)  评论(0编辑  收藏  举报