Linux 命令(find grep sed awk )大全

find命令

命令说明

	1. Linux find命令用来在指定目录下查找文件。
	2. 任何位于参数之前的字符串都将被视为欲查找的目录名。
	3. 如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。

参数

	-name            # 按文件名查找
	-size            # 按文件大小查找
	-perm            # 按权限查找
	-mtime n         # 查找n天内修改内容的文件
	-mmin n          # 查找n分钟内修改内容的文件

常用命令

# 查找当前目录下大于9M的文件详细信息
find . -size +9M | xargs ls -lh   

# 查找当前目录下以 .log 结尾且大于5M的文件,并复制到/tmp目录下
find . -type f -name "*.log" -size +1M -exec cp -av {} /tmp \;  

# 在/var下查找更改时间在三天到五天的文件
find /var -mtime +3 -mtime -5

# 查找当前文件夹下1分钟前3分钟内修改的文件
find . -mmin +1 -mmin -3 



grep命令

命令说明

	1. grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
	2. grep搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2

参数

	^linux         # 以linux开头的行
	$php           # 以php结尾的行
	.              # 匹配任意单字符
	.+             # 匹配任意多个字符
	.*             # 匹配0个或多个字符(可有可无)
	[0-9a-z]       # 匹配中括号内任意一个字符
	[abc]          # 表示匹配一个字符,这个字符必须是abc中的一个。
	(linux)+       # 出现多次Linux单词
	(web){2}       # web出现两次以上
	\              # 屏蔽转义  

常用命令

	# 查找/etc/passwd下包含 root字符串的文件
	grep -n 'root' /etc/passwd 

	# 查找不包含root和nologin关键字的行
	grep -Ev "root|nologin" /etc/passwd 

	# 查找/etc/passwd和/etc/shadow文件中包含root关键字的行
	grep "root" /etc/{passwd,shadow}

	# 统计/etc/passwd文件中包含root字符串行的数量
	grep -c root /etc/passwd 

	# 去除空号和以#号开头的行
	grep -E -v "^$|^#" /etc/nginx/nginx.conf 

	# 输出匹配的前五个结果
	seq 1 20 |grep -m 5 -E '[0-9]{2}' 

	# 输出匹配多少行
	seq 1 20 |grep -c -E '[0-9]{2}' 

	# 匹配以字符串"b"开头的行
	echo "a bc de" |xargs -n1 |grep '^b' 

	# 匹配以"de"字符串结尾的行
	echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$' 

	# 递归搜索/etc 目录下包含 "sshd"字符串 的 conf 后缀文件
	grep -r 'sshd' /etc --include *.conf 
	
	# 匹配41/42数字
	seq 41 45 |grep -E '4[12]' 

 	# grep -v  去除不想查看的进程
 	ps axu|grep 8355
 		work      9749  0.0  0.0 103412   876 pts/41   S+   17:43   0:00 grep 8355
		work     10171  6.4  0.9 922116 604304 pts/41  Sl   17:01   2:39 ./python3 service/server.py --port=8355
		
	ps axu|grep 8355 |grep -v grep  # 不查看grep
		work     10171  6.4  0.9 922116 604304 pts/41  Sl   17:01   2:39 ./python3 service/server.py --port=8355



sed命令

命令说明

	1. sed 命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式空间。
	2. 然后再将下一行读入模式空间进行处理输出,以此类推,直到最后一行。
	3. 还有一个暂存空间,可以暂时存放一些处理的数据,但不能直接输出,只能放到模式空间输出。
	4. 这两个空间其实就是在内存中初始化的一个内存区域,存放正在处理的数据和临时存放的数据

参数

	-n         # 只列出sed处理的哪一行内容
	-e         # 直接在sed模式上进行sed动作编辑
	-f         # 直接将sed动作写在一个文件内
	-r         # 让sed指令支持扩展的正则表达式

常用命令

	 # 将2~5行内容删除,然后打印到屏幕上
	 nl /etc/passwd | sed '2,5d' 
	 
	 # 将2~5行的内容替换成字符串 "new content"
	 nl /etc/passwd | sed '2,5c "new content"' 
	 
	 # 删除/etc/passwd所包含root的行
	 nl /etc/passwd | sed '/root/d' 
	 
	 # 提取到前两行数据,并将 root替换成 newusername
	 nl /etc/passwd | sed -e '3,$d' -e 's/root/mewusername/' 


			关于打印
	 # 打印匹配 blp5 开头的行
	 tail /etc/services |sed -n '/^blp5/p' 
	 
	 # 打印第一行
	 tail /etc/services |sed -n '1p' 
	 
	 # 打印第一行至第三行
	 tail /etc/services |sed -n '1,3p' 
	 
	 # 打印奇数行
	 seq 10 |sed -n '1~2p' 
	 
	 # 打印最后一行
	 tail /etc/services |sed -n '$p' 
	 
	 # 不打印最后一行
	 tail /etc/services |sed -n '$!p' 
	 
	 # 匹配以"blp5开头"到"com开头"的所有行
	 tail /etc/services |sed -n '/^blp5/,/^com/p' 
	 
	 # 匹配以"blp5"开头行到最后一行
	 tail /etc/services |sed -n '/blp5/,$p' 
	 
	 # 引用系统变量,用引号
	 tail /etc/services |sed -n "$a,3p" 



	 		关于匹配删除
	 # 删除包含"blp5"的行
	 tail /etc/services |sed '/blp5/d' 
	 
	 # 删除第一行
	 tail /etc/services |sed '1d' 
	 
	 # 删除第一到第二行
	 tail /etc/services |sed '1~2d' 
	 
	 # 去除空格或开头#号的行
	 sed '/^#/d;/^$/d' /etc/nginx/nginx.conf 



	 		关于匹配替换
	 # 替换 blp5 字符串为 test
	 tail /etc/services |sed 's/blp5/test/' 
	 
	 # 替换开头是 blp5 的字符串并打印
	 tail /etc/services |sed -n 's/^blp5/test/p' 
	 
	 # 使用&命令引用匹配内容并替换
	 tail /etc/services |sed 's/48049/&.0/' 
	 
	 # 将1到4行的"blp5"替换成"test"
	 tail /etc/services | sed '1,4s/blp5/test/' 
	 
	 # 匹配"48129/tcp"并将此行的"blp5"替换成"test"
	 tail /etc/services | sed '/48129\/tcp/s/blp5/test/' 
	 
	 # 删除前两行并将"blp5"替换成"test"
	 tail /etc/services |sed -e '1,2d' -e 's/blp5/test/' 


	 		添加新内容
	 i: 匹配行上面添加
	 a: 匹配航下面添加
	 c: 将匹配航替换成新内容
	 
	 # 在 blp5 上一行添加 test
	 tail /etc/services |sed '/blp5/i \test' 
	 
	 # 在 blp5 下一行添加 test
	 tail /etc/services |sed '/blp5/a \test' 
	 
	 # 匹配"blp5"的行替换成"test"
	 tail /etc/services |sed '/blp5/c \test' 
	 
	 # 在第二行下面添加"test"
	 tail /etc/services |sed '2a \test' :



awk命令

命令说明

	1. awk是一种编程语言,用于在linux下对文本和数据进行处理
	2. awk的处理文件和数据处理方式是逐行扫描,寻找到匹配的行,并在这些行上进行你想要的操作		
	3. 如果没有指定处理动作,则把匹配的行显示到屏幕上

参数

	//              # 匹配代码块,可以是字符串或正则表达式
	{}              # 命令代码块,包含一条或多条命令
	$0              # 表示整个当前行
	$1              # 每行第一个字段
	NF              # 字段数量变量
	NR              # 每行的记录号,多文件记录递增
	/[0-9][0-9]+/   # 两个或两个以上数字
	/[0-9][0-9]*/   # 一个或一个以上数字
	-F'[:#/]'       # 定义三个分隔符
	FNR             # 与NR类似,不过多文件记录不递增,每个文件都从1开始
	\t              # 制表符
	\n              # 换行符
	FS              # BEGIN时定义分隔符
	RS              # 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
	~               # 匹配,与==相比不是精确比较
	!~              # 不匹配,不精确比较
	==              # 等于,必须全部相等,精确比较
	!=              # 不等于,精确比较
	&&             # 逻辑与
	||              # 逻辑或
	+               # 匹配时表示1个或1个以上

常用命令

	 # 以冒号为分隔打印第一列数据
	 cat /etc/passwd |awk -F ':' '{print $1}' 
	 
	 # 打印第一列和第七列数据,并以制表符分隔
	 cat /etc/passwd | awk -F ':' '{print $1"\t"$7}' 
	 
	 # 搜索/etc/passwd有root关键字的所有行,只显示第一行
	 awk -F ':' '/root/{print $1}' /etc/passwd 
	 
	 # 显示第一行第六列的数据
	 w|awk 'NR==1{print $6}' 
	 
	 # 打印第五行和第六行数据
	 awk -F: 'NR==5 || NR==6{print}' /etc/passwd 
	 
	 # 匹配所有 不包含 "mysql"关键字的行
	 awk '!/mysql/' /etc/passwd 
	 
	 # 匹配包含mysql 或者 mail的行
	 awk '/mysql|mail/{print}' /etc/passwd 


			基本语法		
	  # 以"空格"或"斜线"分隔
	 tail -n3 /etc/services |awk -F'[ /]+' '{print $2}'  
	 
	 # 变量赋值
	 awk -v a=123 'BEGIN{print a}'   
	 
	 # BEGIN{} END{}结合使用
	 tail -n3 /etc/services |awk 'BEGIN{print "服务\t\t端口\t\t\t描述"}{print $0}END{print "===结束==="}'   
	 
	 
	 		正则匹配
	 # 匹配开头是 blp5 的行
	 tail /etc/services |awk '/^blp5/{print $0}'   
	 
	  # 匹配第一个字段是 8 个字符的行
	 tail /etc/services |awk '/^[a-z0-9]{8} /{print $0}'  
	 
	 # 匹配记录中包含 blp5 或 tcp 的行
	 tail /etc/services |awk '/blp5/ && /tcp/{print $0}'  
	  
	 # 不匹配开头是#和空行
	 awk '! /^#|^$/' /etc/nginx/nginx.conf   
	 
	  # 匹配以 "blp5开头" 到 "com开头" 之间的所有行
	 tail /etc/services |awk '/^blp5/,/^com/' 
	 
	 		NF		
	 # 打印行数
	 echo "a b c d e f" |awk '{print NF}'   
	 
	  # 打印第一行
	 echo "a b c d e f" |awk '{print $1}' 
	 
	  # 打印最后一行
	 echo "a b c d e f" |awk '{print $NF}' 
	 
	 # 打印倒数第二行
	 echo "a b c d e f" |awk '{print $(NF-1)}' 
	  
	 # 排除最后两个字段
	 echo "a b c d e f" |awk '{$NF="";$(NF-1)="";print $0}'  
	 
	 
	 		NR		
	 # 打印行号+内容
	 tail -n5 /etc/services |awk '{print NR,$0}'  
	 
	  # 打印第三行第二列的值
	 tail -n5 /etc/services |awk 'NR==3{print $2}' 
	 
	  # 打印前三行
	 tail -n5 /etc/services |awk 'NR<=3{print NR,$0}' 
	 
	 
	  		操作符		
	 awk三种为假的情况  #数字 0,空字符串和未定义的值
	 seq 3 |awk '{print $0*2}'  	 # 乘法
	 seq 3 |awk '{print $0/2}'  	 #除法
	 seq 5 |awk '$0%2==0{print $0}'  #取余
	 seq 5 |shuf |awk '{print $0|"sort"}'  #先打乱再排序
	 
	 		if 语句 
	 #如果第一列的值等于3,打印出来
	 seq 5 |awk '{if($1==3)print $0}'  
	 
	 # 双分支if
	 seq 5 |awk '{if($0==3)print $0;else print "no"}'  
	 
	 # 判断数组成员
	 awk 'BEGIN{a["a"]=123}END{if("a" in a)print "yes"}' < /dev/null  
	 
	 # 三目运算符
	 awk 'BEGIN{print 1==1?"yes":"no"}'  
	 
	 
	 
	  		for循环、while语句				 
	 # 遍历文件内容
	 awk '{i=1;while(i<=NF){print $i;i++}}' file  
	 
	 #f or循环遍历
	 awk '{for(i=1;i<=NF;i++)print $i}' file  
	 
	  # 倒序打印
	 awk '{for(i=NF;i>=1;i--)print $i}' file 
	 
	 # break语句
	 awk 'BEGIN{for(i=1;i<=5;i++){if(i==3){break};print i}}'  
	 
	 # continue语句
	 awk 'BEGIN{for(i=1;i<=5;i++){if(i==3){continue};print i}}'  
	 
	 
			 数组		
	  # 自定义数组
	 awk 'BEGIN{a[0]="test";print a[0]}' 
	 
	 # for循环遍历数组
	 tail -n5 /etc/passwd |awk -F: '{a[NR]=$1}END{for(v in a)print a[v],v}'  
	 
	 # 统计相同字段出现次数
	 tail /etc/services |awk '{a[$1]++}END{for(v in a)print a[v],v}'  
	 
	 # 统计 TCP 连接状态(并发数)
	 netstat -antp |awk '/^tcp/{a[$6]++}END{for(v in a)print a[v],v}'  
	 
	  # 只打印出现次数大于等于 2 的
	 tail /etc/services |awk '{a[$1]++}END{for(v in a) if(a[v]>=2){print a[v],v}}' 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值