当前位置: 首页 > news >正文

【linux】grep、awk、sed实战练习(1)-template

一、grep常见用法

1.1.从文件中查找关键字符串

# 比如:查找/etc/nginx/nginx.conf文件包含"listen"的行
[root@ecs_server test]# grep "listen" -n  /etc/nginx/nginx.conf
52:	    listen 8088; 
87:     listen 8096;
# 比如:查找/etc/passwd文件包含"root"的行
方法一:直接从文件中查找
[root@ecs_server ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
方法二:通过管道符号传输查找
[root@ecs_server ~]# cat /etc/passwd|grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

1.2.从目录中查找关键字符串

# 比如:查找/home/下包含"李四"或"张三"的文件及行号
[root@ecs_server test]# grep -E "李四|张三" -n -r /home/
/home/test/a1.txt:4:李四
/home/test/b1.txt:10:李四
# 比如:比对/home/下a.xml和b.xml中ContactNumber字段的区别
[root@ecs_server test]# grep "ContactNumber" -n -r /home/
/home/test/b.xml:106:            <ContactNumber></ContactNumber>
/home/test/a.xml:106:            <ContactNumber>56451234</ContactNumber>

1.3.精确查找文件中包含的单词

使用grep中单词的定界符号:(\<...\> 或者 \b...b\),用于选取准确的字符串。

\< 和\b 是以什么开头;\>和b\ 是以什么结尾;\<...\> 或者 \b...b\ 是指查找这个单词

[root@ecs_server test]# cat d定界符.txt
lisi123
lisiabcde
45lisi
alisi
99lisi123
lisi
zhagnsan
# 单词以lisi开头
[root@ecs_server test]# cat d定界符.txt |egrep "\<lisi"
lisi123
lisiabcde
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "\blisi"
lisi123
lisiabcde
lisi
# 单词以lisi结尾
[root@ecs_server test]# cat d定界符.txt |egrep "lisi\>"
45lisi
alisi
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "lisi\b"
45lisi
alisi
lisi
# 单词以lisi开头和结尾
[root@ecs_server test]# cat d定界符.txt |egrep "\<lisi\>"
lisi
[root@ecs_server test]# cat d定界符.txt |egrep "\blisi\b"
lisi
# 比如:根据进程号(pid=442073)查看进程
[root@ecs_server test]# ps aux|egrep "\<442073\>"
root      442073  0.0  0.0  26828   924 ?        Ss   Jan02   0:00 nginx: master process /usr/sbin/nginx
root      488726  0.0  0.0  12144  1204 pts/2    S+   14:42   0:00 grep -E --color=auto \<442073\>

1.4.查看文件(滤除空行和注释行)

去除 #开头的注释行、空格键开头的空行、空行】,并显示行号,正则表达式:"\s*#|^$|^#"

[root@ecs_server-01 test]# cat /etc/login.defs |egrep -v -n "\s*#|^$|^#" 
15:MAIL_DIR	/var/spool/mail
25:UMASK		022
30:HOME_MODE	0700
39:PASS_MAX_DAYS	99999
40:PASS_MIN_DAYS	0
41:PASS_MIN_LEN	5
42:PASS_WARN_AGE	7
47:UID_MIN                  1000
48:UID_MAX                 60000
50:SYS_UID_MIN               201
51:SYS_UID_MAX               999
56:GID_MIN                  1000
57:GID_MAX                 60000
59:SYS_GID_MIN               201
60:SYS_GID_MAX               999
74:CREATE_HOME	yes
78:USERGROUPS_ENAB yes
81:ENCRYPT_METHOD SHA512

1.5.查出文件中包含的特殊字符

# |sort|uniq 排序 去重 查找出包含的特殊字符
[root@ecs_server test]# egrep -o "[^0-Z]" /etc/ssh/sshd_config |sort|uniq  	 
!
"
#
'
(
)
,
-
.# 列出包含特殊字符的所在行
[root@ecs_server test]# cat /etc/ssh/sshd_config |egrep -n -o "[^0-Z]"
1:#
1:	
1:$
1::
1: 
1:_
1:,
1: 
1:.

二、awk常见用法

awk是一种文本处理工具,它可以从文件或标准输入中逐行读取文本,并对每行文本进行指定操作。

两种语法格式

1.awk [选项] 命令 文本   #命令可分为三段 == ‘ BEGIN{print 1/2}’ {print”ok”} END{print”-----”}’

2.awk [选项] -f 脚本 文本

2.1.awk截取文件内容

比如:awk截取passwd文件的用户名以及密码
[root@ecs_server test]# awk -F ":" '{print $1,$2}' /etc/passwd|head -n 10
root x
bin x
daemon x
adm x
lp x
sync x
shutdown x
halt x
mail x
operator x

 2.2.awk命令的操作命令(BEGIN、END、NF、NR)

$1~/root/  :表示在第一个字段里面包含“root” 
$3>1005 :UID大于1005的
BEGIN  :只在文件开头运行一次 
END :只在文件结尾运行一次 
NF :一行里有多少个字段(列) 
NR : 行号 
$NF :最后一个字段 
length($1) :表达 $1 字段的长度 

[root@ecs_server-01 test]# awk -F ":" 'BEGIN{num=0;print "开始处 理文件/etc/passwd"} $1~/root/ || $3>1005 {print NR,NF,$1,length($1),$NF,$(NF-1),$3;num++} END{print "total:" num}' /etc/passwd 
开始处 理文件/etc/passwd
1 7 root 4 /bin/bash /root 0
13 7 nobody 6 /sbin/nologin / 65534
total:2

2.3 awk的for循环

user[$1]=$3 :赋值操作,user类似是一个字典key=$1,value=$3,{tss:59,clevis:997,……}
login[$1]=$7 :赋值操作,{root:/bin/bash,bin:/sbin/nologin,……}

[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{user[$1]=$3;print $1,user[$1]}'|head
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{login[$1]=$7;print $1,login[$1]}'|head
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
[root@ecs_server test]# cat /etc/passwd|awk -F ":" '{user[$1]=$3}END{for(i in user) print i,user[i]}'|head
tcpdump 72
sshd 74
setroubleshoot 991
systemd-resolve 193
shutdown 6
bin 1
redis 987
chrony 990
tss 59
mail 8

 三、sed常见用法

 sed命令是一种流编辑器,用于对文本进行处理和转换。它可以读取文本文件并对其进行编辑、替换、删除、插入等操作,可以实现批量修改文件内容的功能。 sed是一种支持正则表达式的非交互式流编辑器(stream editor),是脚本中修改文本或者文本替换的最佳工具。

 可参考:

sed命令详解 - edwardlost - 博客园
 


如有问题之处,请多多指教。

http://www.lryc.cn/news/522373.html

相关文章:

  • UDP报文格式
  • 联想Android面试题及参考答案
  • Android CustomTextField
  • 网络设备安全保证计划 (NESAS) - 供应商视角 笔记
  • 强化学习-蒙特卡洛方法
  • IIO(Industrial I/O)驱动介绍
  • 画流程图 代码生成流程图 流程图自动运行
  • Maven 配置本地仓库
  • 计算机网络常见协议
  • SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现
  • 基于Java+SpringBoot+Vue的前后端分离的体质测试数据分析及可视化设计
  • Ansible实战:如何正确选择 command 和shell模块?
  • 机器学习:监督学习与非监督学习
  • 近红外简单ROI分析matlab(NIRS_SPM)
  • 运输层安全协议SSL
  • “扣子”开发之四:与千帆AppBuilder比较
  • Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现
  • 62_Redis服务器集群优化
  • 【React】静态组件动态组件
  • 深度学习中的卷积和反卷积(四)——卷积和反卷积的梯度
  • ASP.NET Core - IStartupFilter 与 IHostingStartup
  • 【零基础租赁实惠GPU推荐及大语言模型部署教程01】
  • 接口传参 data格式和json格式区别是什么
  • 踏上 C++ 编程之旅:开篇之作
  • docker在不删除容器的情况下修改端口映射
  • Mysql tinyint与Java的数据类型的对应关系
  • mac intel芯片下载安卓模拟器
  • 掌握 Ubuntu 终端 mv 与 rename 命令的高效重命名使用方法
  • 【Python】数据容器:列表,元组,字符串,集合字典及通用操作
  • 基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建