(一)grep命令
1、命令说明
grep 是 Linux 系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
# 命令格式:grep [参数] 查找模式 [文件]# 命令说明:grep 家族包括 grep、egrep 和 fgrep;egrep 是 grep 的扩展,可使用扩展的字符串模式进行搜索;fgrep 则是把所有字母看作单词,不识别正则表达式;如果没有指定文件名,grep 命令会搜索标准输入。
2、常用参数
# 常用参数:-c:计算符合匹配字符串的行数-E:将样式为延伸的普通表示法来使用,在使用“ -E ”选项时, grep 才支持”扩展正则表达式”,不使用“ -E ”选项时, grep 默认只支持“基本正则表达式”。-e: 指定字符串作为查找文件内容的范本样式-f:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。-i:忽略字符大小写-n:在现实包含匹配字符串的行之前,标示处该行的行号-v:反转查找,显示不包含匹配字符串的文本行-V:显示版本信息
3、示例
(1)查找指定进程
ps -ef | grep python ======= 查找 Python 进程,一般 Linux 都自带Python 2
(2)查找指定进程个数
ps -ef | grep python -cps -ef | grep -c python
(3)查找指定网卡
ifconfig | grep ens33用了 docker 之后,一个机器里面多的时候有几十上百张网卡,用 grep 只查询 ens33 那一行
(4)从文件中读取关键词进行搜索
cat file1 | grep -f file2输出 file1 文件中含有从 file2 文件中读取出的关键词的内容行。需加参数 -f
cat file0 | grep -cf file1 ======= 计算符合匹配字符串的行数
(5)从文件中读取关键词进行搜索且显示行号
cat file0 | grep -nf file1
(6)从文件中查找关键词
grep 'woshishui' file0
(7)从多个文件中查找关键词
grep 'woshishui' file0 file1
多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上 ” : ” 作为标示符。
(8)grep 显示不包含 “ j” 的文本行
cat file0 | grep -v “j” ======= 参数为小写V
(9)找出以 1 开头的行内容
cat test.txt | grep ^"1"======= ^"字符" 正则里面表示以某字符开头
(10)输出非 1 开头的行内容
cat test.txt | grep ^[^1]
(11)输出以 1 结尾的行内容
cat test.txt | grep 1$ =======$ 表示变量引用
(12)显示包含 18 或者 8 或者 2 字符的内容行
cat test.txt | grep -E "18|8|2""" 里面的 | 表示 或者 ,即满足 18 或者 8 或者 2 的任意一个条件即可
cat anaconda-kscfg | grep -E "au|in"查询包含 au|in 字符的内容行
grep支持使用正则表达式进行匹配,可以通过正则表达式来指定匹配的规则。如下是一些常用的正则表达式:
(二)sort命令(不常用)
1、命令说明
Linux 系统提供了 sort 命令来对文本文件进行排序。sort 命令可以按行、字段或数字进行排序,并支持各种排序选项,以满足不同的排序需求。
# 命令格式:sort [参数] [文件]# 命令说明:sort 命令对指定文件中所有的行排序,将结果显示在标准输出上,如不指定输入文件或使用" - ",表示排序内容来自标准输入缺省情况下以行为关键字按 ASCII 字符顺序进行排序
2、常用参数
-r:逆序排序(降序)。-n:按数值进行排序。-k 字段:按指定的字段进行排序。该参数可指定多个字段,使用逗号分隔。默认字段分隔符为制表符(15个制表符,例如tab)或空格。-t 分隔符:指定字段的分隔符。-u:去除重复行,仅保留第一次出现的行。-b:忽略行首的空白字符进行排序。-f:忽略大小写进行排序。例如, sort -f file.txt 将忽略行首字母的大小写进行排序。
3、示例
(1)按字母顺序对文件进行排序
echo -e “\nb\nd\nc\na\nf\ne”>test2.txtcat test2.txtsort test2.txt# 按排序输出在屏幕,不改变源文件内容
(2)按字段排序
echo -e “b 2\nd 1\nc 4\na 3\nf 6\ne 5”>test2.txtcat test2.txtsort -k 2 -t ' ' test2.txt 对第 2 部分字段(即数字部分字段),分隔符为 '空格' 的内容进行排序
(3)按照数值大小排序
cat test.txtsort -n test.txt
(4)按数值降序排序(从大到小)
cat test.txtsort -n -r test.txt
(5)去除重复行
sort 命令可用于去除文本文件中的重复行,只保留第一次出现的行,使用 -u 选项实现。
假设有一个名为 names.txt 的文本文件,内容如下:
TomJerryTomAliceJerry
去除重复行命令:
sort -u names.txt
运行结果:
AliceJerryTom
(6)合并多个文件排序
假设有两个文件 file1.txt 和 file2.txt,内容分别如下:
=== file1.txt ===applecherry=== file2.txt ===bananaorange
要将两个文件合并后按字典顺序排序,可以运行以下命令:
sort file1.txt file2.txt
运行结果如下:
applebananacherryorange
(三) uniq命令(不常用)
1、命令说明
# 命令格式:uniq [参数] [输入文件]# 命令说明:检查及删除文本文件中重复出现的行(连续重复的行)
2、常用参数
# 常用参数:-c:显示输出中,在每行行首加上本行在文件中出现的次数-d:只显示文件中的各重复行-u:只显示文件中不重复的各行
3、示例
(1)检查及删除文本文件中重复出现的行
echo -e "a\nb\nc \n \n \nd\ne\n \n \n \na\nc\ne">test3.txtcat test3.txtuniq test3.txt
(2)每行行首加上本行在文件中出现的次数
uniq -c test3.txt
(3)只显示文件中的各重复行
uniq -d test3.txttest3.txt 里面重复的空格行,因此这里只显示空格行
(4)只显示文件中不重复的各行
uniq -u test3.txt这里的空格行分别重复了2次和3次,因不显示空格行