Linux文本三剑客(grep sed awk)

Linux文本三剑客(grep sed awk)

Linux 里素有三剑客之称的 grep sed awk 今天主要记录一下它们的用法…

正则表达式

# 首先,三剑客是和正则表达式搭配着来使用的,我们这里简单的介绍一下正则表达式里常用的几个
字符说明举例
^匹配字符串开头^aaa 匹配以aaa开头的所有字符串
$匹配字符串结尾bbb$ 匹配以bbb结尾的所有字符串
.匹配任意单个字符匹配 “cat” 可以写成 c.t
[]匹配集合中的任意字符匹配dog 可以写成 [abcd]og
-表示匹配的一个范围例如匹配一个英文小写字母,可以写成 [a-z]
*匹配零个或多个字符例如匹配 sleep sl*p
+匹配前面的模式至少一次或多次例如 cat c+t
?匹配零个或一个字符例如 bee 写成 b?e
{n}匹配前面的模式恰好n次例如 caat 写成 ca{2}t
\转义特殊字符:使用反斜杠 \ 来转义特殊字符例如匹配 “2+2=4”:2\+2=4
\n匹配一个换行符\n 表示换行
|逻辑或操作符cat|dog
开始介绍文本三剑客

1.文本剑客之一 grep

grep 只是用来查找指定文件中的字符串,然后输出到控制台上或者标准输入输出上
grep仅仅只是匹配到对应的内容,但是无法修改(修改的事情交给sed剑客去做)
1.1 语法格式 grep [参数选项] [匹配模式] [查找的文件]
1.2 参数说明
参数参数说明
-A显示匹配的内容之外,还显示该行之后的N行 After(之后)
-B显示匹配的内容之外,还显示该行之前的N行 Before (之前)
-C显示匹配的内容之外,还显示该行之前后的N行
-c统计匹配的行数
-e相当于逻辑or
-E支持扩展的正则表达式,我的理解,不加这个参数,你在grep里使用正则表达式的时候会报错,仅仅只有grep一个剑客而已
-i忽略大小写
-n显示所匹配内容的所在行号
-o仅仅显示匹配到的字符串
-v排除某些匹配到的字符串
-q不输出任何信息,脚本中常用
-w匹配整个单词
1.3 实战演练
# 先准备好一个操作的文本内容,文件名叫 demo1.txt
# 内容如下
-----------------------------------------------------
处在低谷的时候,不要气馁,相信自己,慢慢积累能量,一鸣惊人。
人贵在有自知之明,但敢于为先者,当守望者也。
There is only one life
there is book
I want you to live seriously

I want to you!
动手记录一些东西,长此以往,你会有一笔可观的精神财富。
期待自己,不报怨他人,以本我为中心,实现人生价值。
-----------------------------------------------------
# 1.将包含"守望"这一行找出来
grep "守望" demo1.txt
# 2.除了包含life 这一行,还需要展示后面的2行
grep -A2 "life" demo1.txt     # 只距离-A ,-B -C的用法相同
# 3.找出以"人"开头的一行
grep "^人" demo1.txt
# 4.统计一下匹配到"I" 这个的行数有多少
grep -c "I" demo1.txt
# 5.显示匹配"to"这一行的的行号是多少
grep -n "to" demo1.txt
# 6. 过滤掉"to"这个字符串并显示行号,其余的输出
grep -v -n "to" demo1.txt
# 7.过滤掉空行
============
^$ 表示空格  | 表示或  # 表示注释符号
============
grep -Ev '^$'  demo1.txt  # 这里用双引号也是可以的,单引号是因为我自己后面的格式问题.

# 8.同时过滤多个不同字符串,例如 life live
grep -e "life" -e "live" demo1.txt

# 9.不区分大小写 过滤there
grep -i "there" demo1.txt

2.文本剑客之二sed

sed 是 stream editor 的缩写,简称流编辑器。
sed 可以对文本进行增删改查

2.1 语法格式 sed [参数选项] [sed内置命令字符] [输入文件]

2.2 参数说明

参数参数说明
-n取消默认的sed输出,常与sed内置命令p连用
-i直接修改文件的内容 而不是输出到终端
aappend,表示追加文本,在指定行后添加一行或多行文本
ddelete,表示删除匹配行的文本
iinsert,表示插入文本,在指定行前添加一行或多行文本
pprint,表示打印匹配行的内容,通常与-n参数一起使用
sreplace 替换正则表达式regexp所匹配的内容

2.3 实战演练

# 准备好操作的内容,我这里的文件名叫 demo2.txt
# 内容如下
------------------------------------------------------------
email:1596557283@qq.com
address:陕西省咸阳市
qq:12345678
weixin:ztpksow666
age:99
------------------------------------------------------------
# 1. 将'99'替换为18
sed 's/99/18/' demo2.txt
# 2. 在每一行行首加上@符号
sed 's/^/@/g' demo2.txt   # 这里的g 表示的是全局匹配
# 3.在行尾加上%
sed 's/$/%/g' demo2.txt
# 4.将1-3 行的所有1替换成9,第四行往后数字都替换成*
sed '1,3s/1/9/g ;4,$s/[0-9]/*/g' demo2.txt
# 5.将替换后的内容写入到另外的文件中
sed 's/qq/QQ/w file1.txt' demo2.txt
# 6.修改qq为QQ,并写入到源文件,(意思就是真正改变源文件的内容)
sed -i 's/qq/QQ/' demo2.txt
# 7.所有行后面追加一行@@@@
sed 'a @@@@' demo2.txt
# 8. 删除weixin 这一行,第四行
sed '4d' demo2.txt # 也可以是删除1-5行, sed '1,5d' demo2.txt
# 9.删除文件中所有的数字
sed 's/[0-9]//g' demo2.txt
# 10. 在1,2行前面插入!!!
sed '1,2i !!!' demo2.txt
# 11.打印第1,2行内容
sed -n '1,2p' demo2.txt

3.文本剑客之三awk

3.1 语法格式 grep [参数选项] [条件动作] [文件]
3.2 参数说明
参数参数说明
-F自定义字段分隔符
NR表示当前行 Now Record
NF表示当前列 Now Filed
RS表示行分隔符 Record Split 默认是换行
FS表示列分隔符 Filed Split 默认是空格和制表符
OFS输出列分隔符 Output Filed Split 默认为空格
ORS输出行分割符 Output Record Split 默认为换行符

awk里内置了很多的函数,也可以自定义函数,这里列举一些常用的

函数函数功能
gsub(r, s, t)在t 内,用r 替换 s
index(s, t)返回字串t在s中的位置
tolower(s)将字符串s转换为小写
toupper(s)将字符串s转换为大写

3.3 实战演练

# 准备一个内容 demo3.txt
-------------------------------------
-rw-r--r-- 1 root   root    192 Mar 26 14:28 test1.txt
-rw-r--r-- 1 root   root      6 Mar 26 10:05 test2.txt
-rw-r--r-- 1 root   root     10 Mar 26 10:24 test3.txt
-rw-r--r-- 1 root   root     44 Mar 17 22:27 test.txt
-rw-r--r-- 1 root   root      0 Mar 11 22:52 tt.txt
-------------------------------------
# 1.显示第2行
awk 'NR==2'  demo3.txt  # == 表示等于,=是赋值
# 2.显示1-3行
awk 'NR==1,NR==3' demo3.txt
# 3.输出文件中的1,2,3列
awk '{print $1,$2,$3}' demo3.txt
# 4.打印第二列和最后一列
awk -F " " '{print $2,$NF}' demo3.txt  # 使用-F自定义分割符
# 5.指定分隔符打印
awk '{print $1,"---",$2}' demo3.txt
# 6.将root 替换为localhost
awk '{gsub("root","localhost",$0);print $0}' demo3.txt  # 这里的$0代表的就是demo3.txt
# 7.awk也是一个编程语言,也有if else for等
awk '{if($3=="root") print "这是root";else print "这不是root"}' demo3.txt

小总结

  • grep 更适合单纯的查找或匹配文本
  • sed 更适合编辑匹配到的文本
  • awk 更适合格式化文本,对文本进行较复杂格式化处理

还有很多三剑客的小技巧,感兴趣的话自行去查看书籍…

再见!

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值