系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结)

目录

 

一、常见系统特殊符号

(一)基础符号系列

1)美元符号  $

2)叹号符号  !

3)竖线符号  |

4)井号符号  #

(二)引号符号系列

(三)定向符号系列

(四)路径符号系列

(五)逻辑符号系列

二、常见通配符号

(一)通配符号作用

(二)通配符号企业应用

三、find(以文件为单位进行查找后删除复制移动)

三、正则符号

(一)正则符号作用说明

(二)正则表达符号分类

(三)正则符号注意事项

(四)基础正则符号说明

(五)扩展正则符号说明

(六)正则符号使用问题

(七)正则符号特性说明

五、grep(过滤筛选信息)

六、sed(修改替换文件内容 擅长对文件中的行进行操作)

1)概念介绍

2)sed命令的执行流程

3)sed命令实际应用

七、awk(擅长统计分析文件内容 擅长对文件中列进行操作)

1)概念介绍

2)awk命令执行过程

3)awk命令的实际应用


一、常见系统特殊符号

(一)基础符号系列

1)美元符号  $

1.用于取出变量中的内容

2.用于取出指定列的信息(awk)

3.表示用户命令提示符号
    超级用户为 #
    普通用户为 $

2)叹号符号  !

1.用于表示取反或者排除意思

2.命令行中表示取出最近命令
    !awk(慎用)
    history|grep awk

3.用于表示强制操作处理
    vim底行模式保存 退出 wq! q!

3)竖线符号  |

1.表示管道符号,管道前面命令,交给管道后面执行

2.经常配合xargs命令使用
经常配合xargs命令使用
查找指定数据信息进行删除
   find /test -type f -name "test*.txt"|xargs rm
   find /test -type f -name "test*.txt" -exec rm -rf {} \;
   find /test -type f -name "test*.txt" -delete
查找指定数据信息进行复制
   find /test -type f -name "test*.txt" |xargs -i cp {} /test01/
   find /test -type f -name "test*.txt" |xargs cp -t /test01/
   find /test -type f -name "test*.txt" -exec cp -a {} /test01 \;
查找指定数据信息进行移动
   find /test -type f -name "test*.txt" |xargs -i mv {} /test01/
   find /test -type f -name "test*.txt" |xargs mv -t /test01/
   find /test -type f -name "test*.txt" -exec mv {} /test01 \;
查找指定数据信息按照日期  --主要用于批量删除历史数据信息
   查找7天以前的数据: find /test -type f -mtime +7 
   查找最近7天的数据: find /test -type f -mtime -7
   查找距今第7天数据: find /test -type f -mtime 7

4)井号符号  #

1.表示文件内容注释符号

2.表示用户命令提示符号
    超级用户为 #
    普通用户为 $

(二)引号符号系列

1.美元括号:
   $()
     表示命令执行结果留下,用于其他命令调用

2.引号符号:
双引号
   ""
     表示输入内容,就是输出内容,但是部分信息会被解析
单引号
   ''
     表示输入内容,就是输出内容(所见即所得)
反引号
   ``
     表示命令执行结果留下,用于其他命令调用

(三)定向符号系列

1.小于符号:
    单个小于符号
        <
            标准输入重定向符号
    两个小于符号
        <<
            标准输入追加重定向符号

2.大于符号:
    单个大于符号
        >/2>
            标准输出重定向符号
            错误输出重定向符号
    两个大于符号
        >>/2>>
            标准输出追加重定向符号
            错误输出追加重定向符号

(四)路径符号系列

1.单点符号:
    .
        表示当前目录

2.双点符号:
    ..
        表示上级目录

3.波浪符号
    ~
        表示用户家目录信息
            超级用户:/root
            普通用户:/home/用户名称

(五)逻辑符号系列

1.并且符号:
    &&
        表示前面的名称执行成功,再执行后面的命令

2.或者符号:
    ||
        表示前面的名称执行失败,再执行后面的命令

二、常见通配符号

作用说明:查找文件名称信息

使用场景:命令行经常使用

(一)通配符号作用

通配符号作用说明:方便匹配找出多个数据文件(按照文件名称进行匹配查找)

(二)通配符号企业应用

通配符号企业应用(wildcard)
1.星号:*
表示匹配所有内容信息
# 找出以什么结尾的文件信息
find /test -type f -name "*.txt"
# 找出以什么开头的文件信息
find /test -type f -name "test*"

2.花括号:{}
表示生成序列信息
# 生成连续数字序列
echo {01..10}
# 生成不连续数字序列
echo {01,03,05}
# 生成连续字母序列
echo {a..d}
# 生成不连续字母序列
echo {a,d,f,h}

表示生成组合序列
# 生成组合序列
echo A{A,B}
# 生成组合序列
echo {A,B}{C,D}
# 生成备份文件
cp oldboy.txt{,.bak}

三、find(以文件为单位进行查找后删除复制移动)

find:查找符合条件的文件

01、精确查找:
find 路径信息 -type 文件类型 -name "文件名"

02、模糊查找:
find 路径信息 -type 文件类型 -name "文件名*"
find 路径信息 -type 文件类型 -name "*文件名"
find 路径信息 -type 文件类型 -name "文*件名"

03、忽略字符大小写查找:
find 路径信息 -type 文件类型 -iname "文件名*"

04、根据数据大小查找数据:
find /test -type f -size +100          --找出大于100k的文件
find /test -type f -size -100           --找出小于100k的文件
find /test -type f -size +1M          --找出大于1M的文件

`b'    for 512-byte blocks (this is the default if no suffix is used)
`c'    for bytes   (推荐)
`w'    for two-byte words
`k'    for Kilobytes (units of 1024 bytes) (推荐)
`M'    for Megabytes (units of 1048576 bytes) (推荐)
`G'    for Gigabytes (units of 1073741824 bytes)

05、根据目录指定层级进行查找数据(进行递归查找):
find /test -maxdepth 1 -type f -name "test*"      

06、实际应用:
01. 如何找出/test/目录中.txt结尾的文件,将找出的文件进行统一删除
    a find /test/ -maxdepth 1 -type f -name "*.txt" -delete
    b find /test/ -type f -name "*.txt" -exec rm -rf {} \;
    c find /test/ -type f -name "*.txt" | xargs rm -f 
    d rm -rf $(find /test -type f -name "*.txt")
    e rm -f `find /test/ -type f -name "*.txt"`
   
02.如何找出/test/目录中.txt结尾的文件,将找出的文件进行批量复制/移动到/tmp目录中    
    find /test/ -maxdepth 1 -type f -name "*.txt" -exec cp  {} /tmp \;
    find /test/ -maxdepth 1 -type f -name "*.txt" | xargs cp /tmp         ---xargs其作用是将查找内容一列变为1行

补充:
1.查找指定数据信息进行删除
01.find /test -type f -name "test*.txt"|xargs rm
02.find /test -type f -name "test*.txt" -exec rm -rf {} \;
03.find /test -type f -name "test*.txt" -delete

2.查找指定数据信息进行复制
01.find /test -type f -name "test*.txt"|xargs -i cp {} /test01/
02.find /test -type f -name "test*.txt"|xargs cp -t /test01/
03.find /test -type f -name "test*.txt" -exec cp -a {} /test01 \;

3.查找指定数据信息进行移动
01.find /test -type f -name "test*.txt"|xargs -i mv {} /test01/
02.find /test -type f -name "test*.txt"|xargs mv -t /test01/
03.find /test -type f -name "test*.txt" -exec mv {} /test01 \;

4.查找指定数据信息按照日期(主要用于批量删除历史数据信息)
01.查找7天以前的数据:find /test -type f -mtime +7
02.查找最近7天的数据:find /test -type f -mtime -7
03.查找距今第7天数据:find /test -type f -mtime 7

三、正则符号

作用说明:查找文件内容信息

使用场景:三剑客命令常用/各种语言经常使用

(一)正则符号作用说明

方便匹配找出文件中的内容信息

(二)正则表达符号分类

1.基础正则表达式(basic regular expression)
^ $ . * [] [^]

2.扩展正则表达式(extended regular expression)
| + () {} ?

(三)正则符号注意事项

①. 按照每行信息进行过滤处理
②. 注意正则表达符号禁止中文
③. 附上颜色信息进行正则过滤
   --color=auto/--color

(四)基础正则符号说明

01.尖角符号:^
	表示以什么字符开头的一行信息

02.美元符号:$
	表示以什么字符结尾的一行信息

03.空行符号:^$
	表示过滤空行信息

04.点号符号:.
	表示匹配任意一个且只有一个字符
	grep -o "." test.txt
	-o:表示显示grep命令执行过程

05.星号符号:*
	表示前一个字符出现0次或者多次

06.点星符号:.*
	表示匹配文件中所有信息(包含空行)
	^.*xxx
		表示以任意字符开头xxx结尾(贪婪匹配)
	^xxx.*xxx$
		表示以xxx开头,xxx结尾的所有行

07.转移符号:\
	表示还原字符的本来意思
		'\.$'
			表示查询出以点结尾的行信息
		tr 源信息 替换后信息  <文件信息
			表示对数据信息进行替换处理,采用一对一替换(sed命令的阉割版)
	转移符号的常见用法汇总
		\n
			表示匹配一个换行符号
		\r
			表示匹配一个换行符号
		\t
			表示匹配一个制表符号

08.括号符号:[ ]
	表示包含括号中信息的
		[abc]
			表示匹配包含a或b或c信息的字符
		^[abc]
			表示匹配包含a或b或c信息的字符开头的信息
		[a-zA-Z0-9]
			找出所有以小写字母大写字母和数字信息的字符
		[a-Z]
			找出所有以小写字母或大写字母组成字符(只能grep/egrep使用)
		^[a-z].*[.!]$
			表示以小写字母开头并且以点或叹号结尾的信息过滤出来

09.排除符号:[^]
	表示排除括号中信息的
		[^abc]
			表示排除包含a或b或c信息的字符
		^[^abc]
			表示排除包含a或b或c信息的字符开头的行(不包含空行)

(五)扩展正则符号说明

01.加号符号:+
	表示前一个字符连续出现了1次或多次以上
		egrep "0+" file
			表示取出数字0字符,以及连续的多个数字0字符
		egrep "[a-z]+" file
			表示取出文件中的所有连续的小写字母(其实是取出单词信息)
	补充总结说明
	一般加号符号经常是与中括号使用,可以匹配出多个不同的连续字符

02.竖线符号:|
	表示匹配多个满足条件的信息(或者)

03.括号符号:()
	表示匹配一个整体信息
		egrep “oldb(o|e)y" file
			表示过滤指定整体信息
	表示用于后项引用前项
		sed -r 's#(.*)#<\1>#g'
			利用sed命令实现后项引用前项
		sed -r 's#([0-9]+)#<\1>#g'
			利用sed命令实现后项引用前项
		sed -r 's#(..)(...)(..)#<\1><\2>#g'
			利用sed命令实现后项引用前项

04.括号符号:{}
	表示定义前面字符出现次数
		x{n,m}
			表示前一个字符至少连续出现n次,最多出现m次
		x{n}
			表示前一个字符正好连续出现了n次
		x{n,}
			表示前一个字符至少连续出现n次,最多出现多少次不限
		x{,m}
			表示前一个字符至少连续出现0次,最多出现m次

05.问号符号:?
	表示定义前面字符出现0次或1次

PS:扩展正则符号
默认grep sed 命令不能直接识别
grep  提升自己  egrep/grep -E
sed   提升自己  sed -r

(六)正则符号使用问题

①. 问题:尖角符号和星号符号区别?
	^d和d*
②. 问题:星号符号匹配不存在信息?
	grep ''
③. 问题:过滤时是否使用引号区别?
	egrep [ab]{1,} oldboy.txt

(七)正则符号特性说明

①. 正则表达符号具有贪婪特性
②扩展正则转换 基础正则方法.
	grep 'go\+d'

五、grep(过滤筛选信息)

grep参数介绍
-A  after   在什么后面
-B  before  在什么前面
-C  centre  在什么中间
-c  统计信息出现的次数

grep命令如何进行过滤
1.筛选出有test的信息
grep "test" test.txt     --从test.txt文件中筛选出有test的信息

2.筛选出有test的信息,但要有test信息的上一行信息也显示
grep -B 1 "test" test.txt

3.筛选出有test的信息,但要有test信息的下一行信息也显示
grep -A 1 "test" test.txt

4.筛选出有test的信息,但要有test信息的上一行和下一行信息也显示
grep -C 1 "test" test.txt

5.统计test信息在文件中出现了几次
grep -c 1 "test" test.txt

六、sed(修改替换文件内容 擅长对文件中的行进行操作)

1)概念介绍

官方概念:字符流过滤编辑和文本字符流转换工具

功能应用说明:
01.处理文本信息
文本文件信息(小文件)
日志文件信息(grep awk分析)
配置文件信息(sed)

02.处理文件方式
增加信息
删除信息
修改信息
查找信息

2)sed命令的执行流程

系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结)_第1张图片

3)sed命令实际应用

命令语法格式:
标准格式:sed [选项] [sed指令] [文件信息]
举例说明:sed -i.bak 's#test#test01#g' test.txt
sed命令参数信息:
-n  取消默认输出
-r  识别扩展正则
-i  真实编辑文件(将内存中的信息覆盖到磁盘中)	
-e  识别sed命令多个操作指令
sed命令指令信息:
p  print        输出信息
i  insert       插入信息,在指定信息前面插入新的信息
a  append       附加信息,在指定信息后面附加新的信息
d  delete       删除指定信息
s  substitute   替换信息 s###g(全局替换)
c               替换修改指定的一整行信息
指令修饰:g
PS:相同指令信息只能使用一次,想使用多次需要加上分号

1.sed查询信息
#01.根据文件内容的行号查询
sed -n '3p' person.txt         --显示单行信息
sed -n '1,3p' person.txt       --显示1-3行信息(连续)
sed -n '1p;3p' person.txt      --显示第1、第3共两行(不连续)

#02.根据内容信息输出单行内容
sed -n '/test/p' person.txt            --将含有test的行显示出来 
sed -n '/test/,/Alex/p' person.txt     --显示包含test到Alex行之间的所有行信息(连续)
sed -n '/test/p;/Alex/p' person.txt    --只显示包含test、Alex的行

2.sed命令增加信息(i:行前、a:行后)
sed '1iHelloworld' test.txt        --在文件最前面增加一行Helloworld
sed '$abaibai' test.txt            --在文件最后面增加一行baibai
sed '3afour' test.txt              --在第三行后面增加一行four
sed '2itwo' test.txt               --在第二行前面增加一行two
sed -e '/test/iqian' -e '/test/ahou' test.txt     --在包含test行的前天增加一行qian,后面增加一行hou
sed '$a100\n101' test.txt          --增加多行信息

企业中编写配置文件:
IPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254
sed '$aIPaddress=10.10.10.1\nmask=255.255.255.0\ngateway=10.10.10.254' 文件名称

3.sed命令删除信息
sed '3d' test.txt        --删除第3行(单行)
sed '2,6d' test.txt      --删除第2-6行(连续行)
sed '3d;6d' test.txt     --删除第3行和第6行

如何利用sed命令取消空行显示?
sed -n '/./p' test.txt
sed '/^$/d' test.txt
sed -n '/^$/!p' test.txt

4.sed命令修改信息
vim 替换: :%s#one#two#g
sed 's#要修改的内容#修改后的内容#g' test.txt
sed 's#one#two#g'
sed 's/#one/two/g' test.txt

后项引用前项进行替换修改
sed 's#()#\n#g' test.txt
ip a s eth0|sed -rn '3s#^.*net(.*)/24.*#\1#gp'     --取出IP地址
sed -i.bak 's#one#two#g' test.txt      --修改文件内容并自动备份
PS:在真实替换文件内容时候,一定不能让n和i参数同时出现
    ni和参数同时使用,会将文件内容进行清空

测验替换功能:
创建测试环境:
-rw-r--r-- 1 root root 0 Jun  7 19:43 test00.txt
-rw-r--r-- 1 root root 0 Jun  7 19:43 test01.txt
-rw-r--r-- 1 root root 0 Jun  7 19:43 test02.txt
-rw-r--r-- 1 root root 0 Jun  7 19:43 test03.txt
批量修改文件的扩展名称 将testxx.txt扩展名修改为testxx.jpg
ls test*.txt|sed -r 's#(.*)txt#mv & \1jpg#g'
mv test00.txt test00.jpg
mv test01.txt test01.jpg
mv test02.txt test02.jpg
mv test03.txt test03.jpg

批量重命名专业命令: rename
rename  .txt                           .jpg                 test*.txt
命令    文件名称需要修改的部分信息    修改成什么信息      将什么样的文件进行修改

 

七、awk(擅长统计分析文件内容 擅长对文件中列进行操作)

1)概念介绍

处理文件信息:
1.文本文件信息
2.日志文件信息
3.配置文件信息

处理文件方式:
1. 排除信息
2. 查询信息
3. 统计信息
4. 替换信息

语法格式:
sed [参数] '条件-处理方式' 文件 
awk [选项] '模式{动作}' [文件信息]	

内置变量
FS:field separator    -F ":"  == BEGIN{FS=":"} == -vFS=":"     字段分隔符变量
NR:number records     --表示行号信息
NF:number of fields   --表示每一行有多少列(默认表示总列数)
			

2)awk命令执行过程

系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结)_第2张图片

3)awk命令的实际应用

一、awk的实际操作过程
测试环境:
Zhang	Dandan		41117397	:250:100:175
Zhang	Xiaoyu		390320151	:155:90:201
Meng	Feixue		80042789	:250:60:50
Wu	    Waiwai		70271111	:250:80:75
Liu	    Bingbing	41117483	:250:100:175
Wang	Xiaoai		3515064655	:50:95:135
Zi	    Gege		1986787350	:250:168:200
Li	    Youjiu		918391635	:175:75:300
Lao	    Nanhai		918391635	:250:100:175

1.awk查询信息
#01.按照行号查询
awk 'NR==2' test.txt            --显示第2行信息
awk 'NR==2,NR==4' test.txt      --显示第2-4行信息
awk 'NR==2;NR==4' test.txt      --显示第2行和第4行信息

PS:在linux中
test=10   --赋值变量信息
test==10  --test等于10

#02.按照字符查询
awk '/one/' test.txt           --显示含有字符one的行
awk '/one/,/three/' test.txt   --显示含有字符one的行到含有three字符的行之间的所有行
awk '/one/;/three/' test.txt   --显示含有字符one的行和含有字符three字符的行

显示xiaoyu的姓氏和ID号码
awk '/Xiaoyu/{print $1,$3}' test.txt

姓氏是zhang的人,显示他的第二次捐款金额及他的名字
awk '/Zhang/{print $NF}' test.txt|awk -F ":" '{print $3}'      -F:指定分隔符
awk -F ":" '/^Zhang/{print $3}' test.txt
awk -F "[ :]+" '/^Zhang/{print $1,$2,$(NF-1)}' test.txt       --以空格和冒号为分隔符

#03.显示所有以41开头的ID号码的人的全名和ID号码
awk '$3~/^41/{print $1,$2,$3}' test.txt       --找出第三列以41开头的所有行,输出该行的1,2,3列信息

#04. 显示所有ID号码最后一位数字是1或5的人的全名
方法一:
awk '$3~/1$|5$/{print $1,$2}' test.txt|column -t       ##column -t 以表格形式显示(整齐)
方法二:
awk '$3~/[15]$/{print $1,$2}' awk_test.txt|column -t
方法三:
awk '$3~/(1|5)$/{print $1,$2}' awk_test.txt|column -t

05. 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
#gsub(/需要替换的信息/,"修改成什么信息",将哪列信息进行修改)
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' test.txt    --找出第4列含有Xiaoyu的所有行,将最后一列的分隔符:替换为$并输出最后一列

文件中空行进行排除/文件中注释信息进行排除
grep -Ev "^#|^$"  文件信息 
sed -n '/^#|^$/!p' 文件信息
awk '/^#|^$/'  文件信息

如何利用awk取出IP地址信息:
ip a s eth0|awk -F "[ /]+" 'NR==3{print $6}'      --将以连续空格或/为分隔符,取出第3行的第6列
hostname -i 


二、awk高级功能说明
普通的模式: 
01. 正则表达式作为模式  
	awk '/^oldboy/{print xx}'
02. 利用比较匹配信息
	NR==2
	NR>=2
	NR<=2
03. NR==2,NR==10

特殊的模式
01.BEGIN{}  在awk执行命令前做什么事情:
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}' test.txt |column -t
姓     名        QQ号        捐款记录
Zhang  Dandan    41117397    :250:100:175
Zhang  Xiaoyu    390320151   :155:90:201
Meng   Feixue    80042789    :250:60:50
...
修改内置分隔符变量
awk -F ":" '{print $2}' test.txt
awk  'BEGIN{FS=":"}{print $2}' test.txt 

02.END{}  在awk执行命令结束之后做的操作
awk 'BEGIN{print "姓","名","QQ号","捐款记录"}{print $0}END{print "操作结束"}' test.txt |column -t 
姓        名        QQ号        捐款记录
Zhang     Dandan    41117397    :250:100:175
Zhang     Xiaoyu    390320151   :155:90:201
...
操作结束

统计累加运算测试:
01. 统计/etc/services文件中空行数量
利用awk公式进行累加运算
awk '/^$/{i=i+1;print i}' /etc/services
awk '/^$/{i=i+1}END{print i}' /etc/services    --输出最终多少行

02. 统计/etc/services文件中有井号开头的行
awk '/^#/{i++}END{print i}' /etc/services

03. 统计系统中有多少个虚拟用户 普通用户
第一个历程: 用户信息都保存在什么文件中了
用户信息保存文件: /etc/passwd
第二个历程: 从文件中匹配出虚拟用户 普通用户 
匹配普通用户
awk '$NF~/bash/' /etc/passwd 
awk '$NF~/\/bin\/bash/' /etc/passwd 
第三个历程: 进行统计
普通用户数量
awk '$NF~/bash/{i=i+1}END{print i}' /etc/passwd     --统计最后一列含有bash的所有行
63
虚拟用户数量
awk '$NF!~/bash/{i=i+1}END{print i}' /etc/passwd    --统计最后一列不含bash的所有行
22

求和运算:
sum=sum+$n(需要进行数值求和的列)
seq 10|awk '{sum=sum+$1;print sum}'


总结:awk命令中$符号用法
$1 $2 $3 : 取第几列信息
$NF      : 取最后一列
$(NF-n)  : 取倒数第几列
$0       : 取所有列的信息

三剑客命令
老三: grep    过滤筛选信息
老二: sed     修改替换文件内容 擅长对文件中的行进行操作
老大: awk     擅长统计分析文件内容  擅长对文件中列进行操作

 

 

 

 

 

你可能感兴趣的:(系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结))