文本处理awk、sed、grep

每日励志:做了才有机会说期待

sed

命令选项使用

	动作之间用;隔开	H剪切,g覆盖复制,G复制到行下,$G最后一行,w另存
a下一行追加,i插入,d删除,c选定行替换,p打印,s替换指定字符,y字符转换

在这里插入图片描述

示例:
文本打印

	sed -n "7p" #第七行
	sed -n "7p;10p" #7和10行
	sed -n "7,10p"  #7到10行
	sed -n "/^A/ p" #以A开头正则放在//中 ,p为打印  
	sed -n "/p;n/"  #奇数行
	sed -n "/n;p/" #偶数行
	sed -n "5,10{n;p}" #5到10行之间的偶数行
	sed -n "5,${n;p}" #5到最后一行
	sed -n "4,/the/p" #从第四行到第一个包含the的行
	sed -n "4,/the/="   #从第四行到第一个包含the的行,打印行号
	sed -n  '$=' ip.sh    #统计行号
	sed -n "/^[a-z]/d" #删除以任意字母开头的行 
	sed -n "/^$/d" #删除空行
	sed -n '/[^$]/p'  #去除空行
	sed -n 's/[[:space:]]/\n/g'p #把空格替换成换行
	sed  -n '/23\/Sep\/2022:06:20:*/, /23\/Sep\/2022:06:24:*/p'  /var/log/nginx/access.log #查看特定时间段内日志

文本替换

	sed 's/^[ ]*//g' 1.txt | wc -c #删除文件中所有的空格,wc -c统计字符个数
	sed  's/the/THE/' #将每行中的第一个the替换成大写THE
	sed  's/l/L/2' #将每行中的第二个l替换成大写L
	sed  's/the/THE/g' #将所有行的the替换成THE
	sed  's/o//g' #将所有行的o替换为空
	sed  's/^/#/'  #在每行行首插入#号
	sed '/the/s/^/#/' #在包含the的每行行首插入#
	sed 's/$/EOF/' #每行行尾插入字符串EOF
	sed '3,5s/the/THE/g' #将3到5行中的所有the替换为THE
	sed '/the/s/o/O/g' #将包含the的所有行中的o都替换成O
	cat -n test.txt | sed '1,2H;17g'  #将1,2行复制到第17行,17行被覆盖
	cat -n test.txt | sed '1,2H;17G' #将1,2行复制到第17行下面
	cat -n test.txt | sed '1,2{H;d};$G' #将1,2行剪切到最后一行下
	sed -n '5,10w 1.txt' test.txt #将test.txt的5到10行另存到1.txt 
	sed '1a33333' test.txt #在第一行下加入33333
	sed '1i33333' test.txt #在第一行上面插入33333
	sed '1c44444' test.txt #第一行替换为44444
	sed '/^[  ]*$/d' #删除纯空行和由空格组成的空行

	#修改文件不加p打印,如果加p打印会出现两行相同
	sed -i 's/.*spring.datasource.url.*/spring.datasource.url=jdbc:mysql:\/\/localhost:3306\/my_terminal?serverTimezone=GMT%2B8\&useSSL=false/' ROOT/WEB-INF/classes/application.properties #匹配替换整行内容
	sed '1,6s/INFO/ALL/g'  log4j.properties #修改文件1到6行中的INFO为ALL
	sed -i ‘/SELINUX/s/disabled/enforcing/’ /etc/selinux/config  #找到SELINUX行,把后面的enforcing替换成disabled

修改tomcat配置文件

\/代表转义,让目录正常匹配

	sed -n '/^3manager/'p ../conf/logging.properties	#匹配以3manager开头的行
	sed -i '/^3manager/s/^/#/' /opt/apache-tomcat-8.5.47/conf/logging.properties	#匹配以3manager开头的行开头加注释
	sed -n '/^\#3manager/p' /opt/apache-tomcat-8.5.47/conf/logging.properties 	#匹配以#3manager开头的行(相当于匹配注释行)
	sed -n '/^\#3manager/s/^#//g'p  /opt/apache-tomcat-8.5.47/conf/logging.properties 	打印以#3manager开头的行并取消开头#号注释
	sed -i '/^\#3manager/s/^#//g'  /opt/apache-tomcat-8.5.47/conf/logging.properties	#同上直接修改
	sed -i 's|server.port=8080|server.port=8085|' /opt/apache-tomcat-8.5.47/webapps/ROOT/WEB-INF/classes/application.properties #修改默认端口
    sed -i '/PRGDIR=`dirname "$PRG"`/a\CATALINA_PID=/var/run/tomcat.pid' /usr/local/tomcat/bin/catalina.sh  #配置文件中匹配某一行PRGDIR=`dirname "$PRG"`在下一行插入内容CATALINA_PID=/var/run/tomcat.pid
    sed -i '$a export REDIS_HOME=\/usr\/local\/redis\nexport PATH=$PATH:$REDIS_HOME\/bin' /etc/profile #在/etc/profile中添加redis的两行环境变量


grep

grep命令选项
-r 递归查找,包含子目录
-I 不区分大小写
-v 反转查找
-n 显示行号
-E 支持扩展(和egrep效果相同)
-o 只把通配的字符输出
-q 静默执行,不输出结果
-w 识别为单词(单词完全匹配)
-c 统计匹配的行数
-A 打印以文本结尾的NUM行
-B 打印以文本起始的NUM行


grep -Evn "^$|^#" /usr/local/redis/redis.conf	#过滤空行,注释行
grep -nr "warning" node.yml		#查找文件中特定内容,带行号显示 
grep -nr -a3 "warning" node.yml		#查找文件中特定内容,显示查找内容的上下三行
grep -e "87600|auth" ca-config.json		#匹配包含87600和auth的行
grep -Hrn :90 ./		#目录下包括子目录查找包含特定内容的文件
grep '23/Sep/2022:06:*:[0-59]' /var/log/nginx/access.log  #查看特定时间段日志
awk

用法:awk 选项
‘模式或条件 {编辑指令}’ 文件1 文件2 …//过滤兵输出文件符合条件的内容
awk ‘BEGIN{FS=“:”};END{print}’ 文件名 指定:为分隔符
一,内置变量
FS: 指定每行文本的字段分隔符,缺省默认为空格或制表位(tab)
NF:当前处理的行的字段个数(列数)
NR:当前处理的行的序数(行数)
FILENAME:awk浏览的文件名
$0:当前处理的行的整行内容
$n:当前处理的第n个字段(第n列)
RS:输入记录分隔符(输入换行符),指定输入时的换行符
二,命令选项
awk -v #将变量传入到awk中
例:

device=ens34
LOCAL_IP=`ifconfig $device | grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"  | sed -n '1p'`
#输出结果为脚本中你想要使用的网卡的ip
hostnamectl set-hostname $(awk -v ip=$LOCAL_IP '{if($1==ip && $2 !~ "kubeapi")print $2}' /etc/hosts)
#根据你指定的网卡ip按照hosts的记录去修改主机名 
#计算用户UID,输出总和,平均数
cat /etc/passwd | awk -F":" '{sum+=$3}; END {print sum} END {print int(sum/NR)}'

#打印密码为空的用户
awk -F: '$2=="" {print $0}' /etc/shadow

#打印最后一列最后一行 
cat test001.txt | sed -n '$p' | awk  '{print $NF}'

#统计行数
awk 'END{print NR}' ip.sh
#统计次数查询历史命令中使用最多的五条命令
history  | awk '{print $2}' | sort | uniq -c | sort -nr |  head -5

#打印第三行倒数第二列
vmstat | awk 'NR ==3{print $(NF -2)}' 

打印docker镜像名称标签,:连接
docker images | awk {'print $1":"$2'}
扩展知识

uniq
单命令用于去除重复的行
-c:在行首用数字表示该行出现了多少次
-u:仅仅显示那些没有出现重复过的行
-i:忽略大小写
-d:只显示重复行

sort
单命令默认用于行首以升序排序
-u :去除重复行
-r :行首以降序排列,默认是升序
-o : 将排序结果输出到文件中,类似重定向符号>
-n :以数值大小排序,默认是按字符排序
-t :分隔符
-k :第N列
-b :忽略前导空格。
-R :随机排序,每次运行的结果均不同
Xargs
如果 命令不支持|管道来传递参数使用xargs作用相同

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背锅攻城师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值