美文网首页
六周一次课

六周一次课

作者: 艾特梁老师 | 来源:发表于2017-09-05 10:09 被阅读0次

grep

grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法: grep [-cinvABC] 'word' filename
-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行;取反。
-r :grep一般情况下用于文件,-r选项用来递归遍历目录。
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

[root@t1 tmp]# grep -A2 'zyb' /etc/passwd
zyb:x:1001:1001::/home/zyb:/bin/bash
user2:x:1003:1002::/home/user2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash

把包含'zyb'的行以及这行下面的两行打印出来。

[root@t1 tmp]# grep -B2 'zyb' /etc/passwd
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
bird:x:1000:1000::/home/bird:/bin/bash
zyb:x:1001:1001::/home/zyb:/bin/bash

把包含 ‘zyb’ 的行以及这行上面的两行都打印出。

[root@t1 tmp]# grep -C2 'zyb' /etc/passwd
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
bird:x:1000:1000::/home/bird:/bin/bash
zyb:x:1001:1001::/home/zyb:/bin/bash
user2:x:1003:1002::/home/user2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash

下面是常用的典型实例

  1. 过滤出带有某个关键词的行并输出行号
[root@t1 ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
  1. 过滤不带有某个关键词的行并输出行号
[root@t1 ~]# grep -v 'nologin' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bird:x:1000:1000::/home/bird:/bin/bash
zyb:x:1001:1001::/home/zyb:/bin/bash
user2:x:1003:1002::/home/user2:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
  1. 过滤出所有包含数字的行
[root@t1 ~]# grep '[0-9]' /etc/inittab 
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
  1. 过滤出所有不包含数字的行
[root@t1 ~]# grep -v '[0-9]' /etc/inittab 
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
  1. 把所有以'#'开头的行去除
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root




  1. 去除所有空行和以'#'开头的行
[root@t1 ~]# grep -v '^#' /etc/crontab |grep -v '^$' 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

5实例中有空行,6的结果中就没有空行了

  • 在正则表达式中,“”表示行的开始,“$”表示行的结束,那么“$”就表示空行。
    “[集合]”表示集合中的某一个元素,此外还有一种用法[^集合]表示集合外任意字符。那么如果要过滤出不以数字以及大小写字母开的行怎么写?
[root@t1 zyb]# cat 1.txt 
123
456
#sdf
asdf

ASDdds
123awe
[root@t1 zyb]# grep -v '^[0-9a-zA-Z]' 1.txt 
#sdf

[root@t1 zyb]# grep '[^0-9a-zA-Z]' 1.txt 
#sdf

用了两种方法,但是第一种打印的有空行,第二种没有空行,两者不太一样。空行的开头没有字符。

  1. 过滤任意一个字符;过滤重复的字符
[root@t1 tmp]# !g
grep -n 'r.o' passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
28:fex:x:r.o:asldkrf
29:ftp:x:rao:89sdf
30:r3o:x:wer
31:rAo:x:dsfa
[root@t1 tmp]# grep -n 'ro*o' passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
14:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
18:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
21:chrony:x:997:995::/var/lib/chrony:/sbin/nologin
26:distro:x:1004:1004::/home/distro:/bin/bash

  • "."匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符。
  • ""匹配之前的项0次或者多次,co*l匹配cl、col、cool、coool等。代表0次时,就是没有o。
  1. { },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即 ‘oo’ 的行。注意,{ }左右都需要加上脱意字符 ‘\’, 另外,使用{ }我们还可以表示一个范围的,具体格式是 ‘{n1,n2}’ 其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。
[root@t1 tmp]# grep 'o\{2\}' passwd 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
hoom
hooom
roooot
  1. 筛选一个或一个以上前面的字符;
    '+'匹配之前的项1次或者多次
[root@t1 tmp]# grep -E 'o+o' passwd 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
hoom
hooom
roooot
  1. 筛选零个或一个前面的字符
    '?'匹配之前的项1次或者0次

  2. 筛选字符串1或者字符串2
    |交替匹配|两边的任意一项ab(c|d)匹配abc或abd

相关文章

  • 六周一次课

    grep grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。语法: grep ...

  • 19年6月PD家长课

    每周一次,连续六周的家长课,一转眼就结束了。六周里,一起欢声笑语,一起纠结迷茫,一起总结反思,相互鼓励,相...

  • 13周跑步计划

    第六周第一课 成功打卡✌️

  • 13周跑步计划

    第六周第二课 成功打卡✌️

  • 慧易全脑

    本周周六周日有全脑体验课

  • 十一后的这周真累

    国庆后后的这周上班真累。 8号9号周六周日,补第六周周六和周五的课,我第六周周五刚好三次课,所以9号也就是周日那天...

  • 兰启昌老师财富训练营总复盘

    不知不觉,兰老师财富自由课就结束了,这是第一次能听懂并落到实处的财务课。感谢兰老师的用心准备。 一、以下是这六周以...

  • 2021-12-11

    今天带着哥哥妹妹一起爬山,他们人生中的第一次爬上北高峰。 今年由于给儿子周末报名了剧场课,周六周日都有课。所以就少...

  • 秋日暖阳下,我和婆婆在小院里捡豆子

    继中秋节回了一次老家后,一直没回去过。平日里大宝上学,周六周日下午大宝都有足球课,周日上午还有播音主持课,只有周六...

  • 027 文字纪要#米课六周年年会活动#我们是来搞笑的 (老华篇)

    图 米课六周年活动现场纪要。 帅气的主持人David 今天能来到米课六周年年会现场的各位小伙伴,因为我相信...

网友评论

      本文标题:六周一次课

      本文链接:https://www.haomeiwen.com/subject/mvcujxtx.html