七、shell脚本语言文本处理三剑客(grep、awk、sed)

下一篇:七、shell脚本语言文本处理三剑客sed使用

目录

背景:

一、grep

1、OPINTION参数选项 

2、grep功能演示

示例1:

示例2:

示例3:

 示例4:

 示例5:

示例6:

示例7:

 示例8:

示例9:

示例10:

 示例11:

 示例12:

 示例13:

示例14:

 示例15:

 示例16:

 示例17:

 示例18:

示例19:

示例20:

示例21:


背景:

在shell脚本中经常会做一些文本的处理,比如日志取值、内存取值、还有文件名称的取值等等都是文本的处理,在这些文本的处理过程中会经常使用到grep、awk、sed也叫做shell脚本的文本三剑客,如下就是具体的介绍grep、awk和sed的常规操作。

一、grep

grep也是过滤,作用是过滤来自一个文件或标准输入匹配模式内容。 除了 grep 外,还有 egrep、fgrep。egrep 是 grep 的扩展,相当于 grep -E。fgrep 相当于 grep - f,用的少。 

格式:
Usage: grep [OPTION]... PATTERN [FILE]...

1、OPINTION参数选项 

支持的正则作用描述
-E,--extended-regexp模式是扩展正则表达式(ERE)
-P,--perl-regexp模式是 Perl 正则表达式
-e,--regexp=PATTERN-e,--regexp=PATTERN
-f,--file=FILE从文件每一行获取匹配模式
-i,--ignore-case忽略大小写
-w,--word-regexp模式匹配整个单词
-x,--line-regexp模式匹配整行
-v,--invert-match打印不匹配的行,常说取反的
输出控制作用描述
-m,--max-count=NUM输出匹配的结果 num 数
-n,--line-number打印行号
-H,--with-filename打印每个匹配的文件名
-h,--no-filename不输出文件名
-o,--only-matching只打印匹配的内容
-q,--quiet不输出正常信息
-s, --no-messages不输出错误信息
-r,--recursive递归目录
-c,--count只打印每个文件匹配的行数

--include=FILE_PATTERN

--exclude=FILE_PATTERN

--exclude-from=FILE

--exclude-dir=PATTERN

只检索匹配的文件

跳过匹配的文件

跳过匹配的文件,来自文件模式

跳过匹配的目录

内容行控制作用描述
-B,--before-context=NUM打印匹配的前几行
-A,--after-context=NUM打印匹配的后几行
-C,--context=NUM打印匹配的前后几行
--color[=WHEN]匹配的字体颜色

2、grep功能演示

示例1:

grep比较两个不同的文件的相同内容,并输出 b 文件中在 a 文件相同行的内容,这里输出相同行,不是相同的内容就输出的,切记。

[root@~ test]# grep -f a.txt b.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash
nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin

示例2:

grep比较两个不同文件的内容,并输出 b 文件中在 a 文件不同的行,这里校验标准也是行

[root@~ test]# grep -v -f a.txt b.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

示例3:

grep匹配多个模式,这里的xargs的作用就是将前面echo的三个参数按照每次一个参数的方式输出到后面的命令使用

[root@~ test]#  echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc' 
a
bc

 示例4:

grep去除空格 http.conf 文件空行或开头#号的行 

#原文本信息:
[root@~ test]# cat a.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash

nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin
# back

#去除操作之后的信息:
[root@~ test]# grep -E -v "^$|^#" a.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash
nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin

 示例5:

grep匹配开头不分大小写的单词,xargs的作用和上面的一样,就是每次传递一个参数给后面的命令执行。[这里是匹配内容的范围]

[root@~ test]# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a

示例6:

grep只显示匹配的字符串,匹配所有的字符串

[root@~ test]#  echo "this is a test" |grep -o 'is' 
is
is

示例7:

grep输出匹配的前五个数字,至少是两个字符的,{2}表示匹配至少两个字符位的内容

[root@~ test]# seq 1 20 |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14

 示例8:

grep统计匹配多少行,这里匹配至少2个字符位的内容,并统计有多少行

[root@~ test]# seq 1 20 |grep -c -E '[0-9]{2}'
11

示例9:

grep匹配 b 字符开头的行,xargs就是每次输出一个参数到后面的命令执行

[root@~test]# echo "a bc de" |xargs -n1 |grep '^b' 
bc

示例10:

 grep匹配 de 字符结尾的行并输出匹配的行,xargs的作用和上面的一样的,-n的作用是输出匹配的内容,同时打印出匹配内容所在的行号。

[root@~ test]# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$' 
5:abcde

 示例11:

grep递归搜索/etc 目录下包含 ip 内容的 conf 后缀文件 

[root@VM-8-10-centos ~]# grep -r 'user="root"' /etc --include *.conf
/etc/dbus-1/system.d/org.freedesktop.systemd1.conf:        <policy user="root">
/etc/dbus-1/system.d/wpa_supplicant.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.locale1.conf:        <policy user="root">
/etc/dbus-1/system.d/com.redhat.tuned.conf:     <policy user="root">
/etc/dbus-1/system.d/teamd.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.timedate1.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.machine1.conf:        <policy user="root">
/etc/dbus-1/system.d/nm-ifcfg-rh.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf:        <policy user="root">
/etc/dbus-1/system.d/dbus-abrt.conf:  <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.import1.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.login1.conf:        <policy user="root">
/etc/dbus-1/system.d/nm-dispatcher.conf:        <policy user="root">
/etc/dbus-1/system.d/FirewallD.conf:  <policy user="root">

 示例12:

grep查询条件排除搜索 bak 后缀的文件,简单的理解就就是查询符合内容的文件,但是这个文件的后缀不是bak的。

注:在/opt目录下存在a.bak文件和a、file文件,其中a和file的文件中含有root字符串, 

[root@VM-8-10-centos /]# grep -r 'root' /opt --exclude *.bak
/opt/a:root
/opt/file:root

 示例13:

grep排除来自file文件的匹配内容,具体匹配文件名称

[root@VM-8-10-centos opt]#  grep -r 'root' /opt --exclude-from file 
/opt/a:root
/opt/a.bak:root

示例14:

 grep匹配 41 或 42 的数字,seq 41 45表示获取41到45的数字,默认是整数的

[root@~ opt]# seq 41 45 |grep -E '4[12]'
41
42

 示例15:

grep匹配至少 2 个字符的内存,seq 13表示显示到13的整数值

[root@~ opt]# seq 13 |grep -E '[0-9]{2}' 
10
11
12
13

 示例16:

grep匹配至少 2 个字符的单词,最多 3 个字符的单词,xargs的作用和上面的一样,每次输出一个参数到后面的命令执行

[root@~ opt]# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc

 示例17:

grep匹配所有 IP

[root@VM-8-10-centos opt]# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
10.0.8.10
255.255.252.0
10.0.11.255
127.0.0.1
255.0.0.0

 示例18:

grep打印匹配结果所在行内容和后 3 行的内容

[root@~ opt]#  seq 1 10 |grep 5 -A 3
5
6
7
8

示例19:

grep打印匹配结果所在行的内容及前 3 行的内容

[root@~ opt]#  seq 1 10 |grep 5 -B 3 
2
3
4
5

示例20:

grep打印匹配结果所在行的内容及前后 3 行的内容

[root@~ opt]#  seq 1 10 |grep 5 -C 3 
2
3
4
5
6
7
8

示例21:

grep报错不显示出报错提示信息

#在grep中加入-s就是执行失败,也不显示报错信息,正常则显示输出的信息
[root@VM-8-10-centos opt]# grep 'a' abc
grep: abc: No such file or directory
[root@VM-8-10-centos opt]# grep -s 'a' abc
[root@VM-8-10-centos opt]# echo $?
2

#在grep中加入-q表示正常查询不显示输出内容,错误会显示
[root@VM-8-10-centos opt]# grep  'a' a.txt 
iaaaaaa
aa
[root@VM-8-10-centos opt]# grep  -q 'a' a.txt 

总结:

如上就是grep的命令的使用和演示了,希望可以帮助到大家,点赞加关注!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

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

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

打赏作者

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

抵扣说明:

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

余额充值