Shell三剑客(grep、sed、awk)(下)

简介: Shell三剑客(grep、sed、awk)(下)

(3)替换符合条件的文本


——将每行的第一个the替换为THE

20201201133445113.png

——将每行中的第二个l替换为L


20201201161412639.png

——每行开始添加#字符(其实就是把开头换成#)


20201201161654782.png

——将3-5行的所有的the替换为THE(3,5就是三到五行,后面加了g就是所有的意思)


20201201161802800.png

(4)迁移符合条件的文本


操作符:


  • H 复制到剪贴板;
  • g,G 将剪贴板中的数据覆盖/追加到指定行;
  • w 保存为文件;
  • r 读取指定文件;
  • a 追加指定内容
    ——将包含the的行,迁移到行尾(;用于多个操作,和管道符差不多,H复制到剪贴板---d删除---$G追加到行尾)

2020120116214429.png


——将1-5行迁移到17行后


20201201162324447.png


——将包含the的行另存为新文件(w就是另存为,另存为到out.file)

20201201162556634.png

——在包含the每行后添加文件hostname内容(/the/r就是包含the的每行后面都加上/etc/hostname的内容,也就是读取了指定文件的内容)

20201201162742104.png


——在第3行后插入新行,内容为New (a也就是添加了指定内容)


20201201162850995.png

(5)使用脚本编辑文件


使用sed脚本,将多个编辑指令存放到文件中(每一行一条编辑指令),通过 -f 的方式调用


——将1-5行迁移到17行后


使用sed:

20201201163317785.png


使用脚本:


20201201163517226.png


效果其实是一样的


三、awk工具


简介:


awk是行处理器,相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息


(1)awk工作流程


#awk -F ‘:’ ‘{print $1,$3,$4}’ /etc/passwd


按这条命令来说:


  • awk命令会逐行读取文件的内容进行处理
  • awk以’:’为分隔符,将第1行数据格式化为7段,每段数据存入$1–$7变量中。$0存储这1行数据,-F即是按什么字符来分割,这里写的就是-F:,说明以:来分割
  • 一行处理完成继续处理下一行,直到此文件读取结束
    执行完命令后的结果:


20201201164741859.png


(2)awk常见用法


  • awk 选项 ‘模式或条件 { 编辑指令 }’ 文件1 文件2 …
  • awk -f 脚本文件 文件1 文件2 …


(3)特殊的内建变量

$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较(包括)
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符
{print} 类似于显示的意思,后面可以跟$位置变量显示相应的字段

用法示例:


(1)按行输出文本


——输出1-3行内容(NR==即是指定行数)

20201201165155920.png

这里(NR>=1)&&(NR<=3)和上面的NR==1,NR==3意思其实是一样的


20201201165305551.png

——输出奇数行(%2求模运算,余数为1是奇数,0为偶数 )


20201201165547291.png

——输出偶数行

20201201165615497.png

——统计以/bin/bash结尾的行(和grep -c "/bin/bash$"其实是一样的,grep的更简单一点,看个人喜好)


2020120116570529.png

(2)按字段输出文本


(这个感觉更常用一点,用法(1)的grep也能做到)


——输出每行中以空格分割的第3个字段(运用了位置变量与之配置,不加-F即默认是空格来分割)

20201201170007216.png


——密码为空的行 (我这个没有密码为空的用户所以筛选不出来)


20201201170225898.png

——输出第7个字段不是/bin/bsh也不是/sbin/nologin的行(!=就是不相同)


20201201170330716.png

(3)通过管道符、双引号调用shell命令


示例1:


条件:调用wc -l 命令统计使用bash的用户个数


  • 使用awk工具执行

20201201170546601.png

使用grep命令执行


20201201170700284.png

  • (效果是一样的)


示例2:

条件:调用w命令,统计在线用户数


  • 使用awk工具执行


20201201170944931.png

使用常规命令执行 (所得减去2就是在线用户数量,可以先试试w这个命令,前两行是时间日期等)


20201201171021562.png


20201201171124701.png


主要是看敲完命令后的效果,发现规律后就很好理解了,选项虽然多,但是好多也不常用,有时间的话记一下就可以,也不用全都记住,但是最起码给一个sed这类的表达式什么的得能看懂

目录
相关文章
|
5月前
|
Shell 数据安全/隐私保护
shell中的通配符 熟悉grep、cut、sort等小工具和shell中的通配符的使用
shell中的通配符 熟悉grep、cut、sort等小工具和shell中的通配符的使用
59 0
|
10月前
|
Shell 数据处理 Perl
shell脚本里的三剑客之一awk
shell脚本里的三剑客之一awk
84 2
|
10月前
|
存储 Shell Perl
shell脚本三剑客之sed
shell脚本三剑客之sed
66 2
|
1月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
87 2
|
3月前
|
Shell Linux Perl
shell 编程中 awk ,wc ,$0,$1 等 命令的使用总结
shell 编程中 awk ,wc ,$0,$1 等 命令的使用总结
98 0
|
5月前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
78 2
|
4月前
|
Shell Linux Perl
Linux shell脚本sed使用
Linux shell脚本sed使用
37 1
|
5月前
|
机器学习/深度学习 Shell Perl
第七章 Shell文本处理三剑客之sed
第七章 Shell文本处理三剑客之sed
|
5月前
|
Shell Perl
shell学习(十) 【shell awk基本语法】
shell学习(十) 【shell awk基本语法】
28 1
|
5月前
|
算法 Shell Linux
【Shell 命令集合 文档编辑】Linux 文本搜索工具 grep命令使用指南
【Shell 命令集合 文档编辑】Linux 文本搜索工具 grep命令使用指南
69 4