目录
grep
文本三剑客之一
对文本内容进行过滤
支持正则表达式
grep
是一个 Linux/Unix 操作系统中常用的命令,它用于在文本中查找匹配的字符串并输出相应的行。它的名字是由 g/re/p
组合而成的,其中 g
表示 global,re
表示正则表达式,p
表示打印,意思是全局搜索某个正则表达式并打印匹配的行。
grep命令的语法为:
grep [options] pattern [file...]
其中,pattern
指定要查找的字符串或正则表达式,file
指定要查找的文件,可以指定多个文件。如果不指定文件,grep
命令将从标准输入读取数据。
常用的 grep命令选项:
-
-i
:忽略大小写 -
-v
:取反(除了什么其他都要) -
-n
:输出匹配的行及行号 -
-c
:仅输出匹配的行数 -
-r
:递归地搜索子目录中的文件递归显示当前目录下所有包含搜索文本的内容但是他不处理软连接处理软连接要用-R -
-w
:只匹配完整单词 -
-e
:指定要搜索的模式可以跟多个条件 -
-E
:使用扩展的正则表达式语法或者直接输入egrep也可以 -
-m:匹配几次后停止 +数字就匹配第几个文本内容
-
-o :只匹配搜索的内容其余一概不显示
-
-A: 加上数字就是行数匹配到当前行以及后几行内容这里是3就是匹配后三行
-
B:匹配文本当前行的前几行用法同上
-
-C:匹配文本当前上下几行的内容是A和B的结合
-
-f:处理两个文件中相同的内容第一个文件做为匹配内容
-
^$:过滤文本空行使用正则表达式一定要用""引起来
-
^:以什么为开头匹配
-
$:以什么为结尾匹配
-
-n+"^内容$"+文件名称
-
只匹配有一个搜索内容的行,多个的不匹配
-
这里就只匹配了最后一个root
sort
以行为单位对文件内容进行排序
也可以根据不同的数据类型来进行排序
sort -f 忽略大小写,默认情况大写字母会排在前面
sort -b忽略每行前面的空格
sort -n按照数字进行排序正向排序(从小到大)
sort -r反向排序(从大到小)
sort -u 去重复
sort -o将排序过的结果输出到指定的文件
想给他们原来的顺序来排列
cat -n /etc/passwd | sort -n -o ky29.txt
这个命令将 /etc/passwd
文件的每一行进行编号,并将编号后的内容输出到屏幕上。同时,它还会将输出结果按照行号进行升序排序,并将排序后的结果保存到名为 ky29.txt
的文件中。
uniq快捷去重复
格式
cat 文件名 | uniq 选项
单独使用 uqin 选项 参数
uniq -c统计连续重复的行的次数,并且合并重复的行
如果想给他排序就可以再连接个管道符
uniq-u显示仅出现一次的行(只有连续重复出现的他才会不显示如果分开的重复内容还是会统计)
uniq -d 匹配连续出现的行一定要是连续出现的行才会匹配
tr 对来自标准输入的字符,进行替换 压缩 删除
tr -c 保留字符集1的字符,其他的字符用字符集2进行替换
保留ab替换了c输出结果一个是abaa
tr -b 删除所有字符集为1的字符(这里示例中字符集1位abc意思是删除abc里的ab只保留c)只有-d不需要跟上字符集2
tr -s 把重复出现的字符串压缩成一个之后用前一个替换成后一个
这里就是把t压缩成一个t并替换成了b所有输出为zb
tr -t 就是替换默认就是-t不加t也可以替换
cut 快速裁剪
选项加参数
也可以用cat配合 cat file | cut 选项
cut -d 指定分隔符
cut -f 按字段进行截取,跟上数字,截取第几段
cut -b 以字节为单位进行截取
cut -c以字符为单位进行截取
cut -complemnt 排除所指定的字段
cut -output -delimiter
split文件拆分
split -l 指定行数
split -b 指定文件大小
他会严格按照你规定的大小进行切割剩下的是多少就是多少这里限制的时2.0M
paste 合并文件
paste左右合并
cat是上下合并
实验题
统计当前主机的链接状态
ss -nta | grep -v '^State' | cut -d " " -f 1 | sort | uniq -c
表示建立的TCP链接处于活动状态
第二题
统计当前主机的链接数
ss -nt | tr -s " " | cut -d " " -f 4 | sort -n | uniq -c
正则表达式是一种用于描述字符串模式的特殊语法。它可以用来匹配、搜索、替换文本中的字符或字符串。
正则表达式由普通字符和元字符(也称特殊字符)组成。普通字符包括字母、数字和常用标点符号,表示其本身;元字符具有特殊的含义,例如 *
表示前面的字符或模式出现任意次,+
表示前面的字符或模式出现至少一次,?
表示前面的字符或模式出现零次或一次等。匹配结果只看红字部分
以下是常用的正则表达式元字符:
-
.
:匹配任意一个单个字符也可以是汉字 -
*
:匹配前面的字符或模式出现零次或任意次数 -
+
:匹配前面的字符或模式出现至少一次 ?
:匹配任意一个字符|
:表示逻辑 OR,可以匹配多个模式中的任何一个-
()
:表示将多个模式组合成一个子模式,方便后续引用或组合 -
[]
:表示匹配字符集合中的任意一个字符 - 匹配0-9的内容
[^]
:表示匹配除了字符集合中的任何一个字符之外的任意一个字符(取反除了什么其他都要)这里除了大写的A-Z其他都要
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql等
主要用来匹配字符串(命令结果,文本内容),
通配符只用于匹配文件名、目录名等,不能用于匹配文件内容。(而且是已存在的文件或者目录)
通配符主要是为了方便用户对文件或者目录的描述, 例如用户仅仅需要以".sh"结尾的文件时,使用通配符就能很方便地实现。 各个版本的shell都有通配符,这些通配符是一些特殊的字符, 用户可以在命令行的参数中使用这些字符,进行文件名或者路径名的匹配。 shell将把与命令行中指定的匹配规则符合的所有文件名或者路径名作为命令的参数, 然后执行这个命令。
*:通配符匹配任意一个或多个字符 ls *.txt
?:通配符 匹配一个任意字符 [root@localhost opt]# ls ?.txt
[] 通配符 [list] 匹配list中任意单个字符 ls [a-z].txt
-
基本正则表达式
-
扩展正则表达式
元字符(字符匹配)
元字符: . 匹配任意单个字符,可以是一个汉字 () 使用转义符,只表示() [] 匹配指定范围内的任意单个字符,示例:[dn] [0-9] [] [a-zA-Z] [:alpha:] [^] 匹配指定范围外的任意单个字符,示例:dn a.z [:alnum:] 字母和数字 [0-9] [a-z] [0-9] [a-z] [:alpha:] 代表任何英文大小写字符,亦即 [A-Z], [a-z] [:lower:] 小写字母,示例:[[:lower:]],相当于[a-z] [:upper:] 大写字母 [A-Z]
空格匹配
虽然输出结果并没有显示但是鼠标拖动选中红色部分就是空格
表示次数
-
#匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
-
.* #任意长度的任意字符,不包括0次,也就是匹配所有
-
\? #匹配其前面的字符出现0次或1次,即:可有可无
-
+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
-
{n} #匹配前面的字符=n次
-
{m,n} #匹配前面的字符至少m次,至多n次
-
{,n} #匹配前面的字符至多n次,<=n
-
{n,} #匹配前面的字符至少n次