当前位置: 澳门新濠3559 > 操作系统 > 正文

将etc/passwd目录下的内容拷贝到grep目录下,打印指

时间:2019-11-22 03:29来源:操作系统
支撑linux正则表明式的工拥有:grep:达成查找,sed,awk:都以流式编辑器,能够兑现查找和替换,况兼把替换的文本输出到显示屏上。 六周第二次课(十二月23日卡塔 尔(阿拉伯语:قط

支撑linux正则表明式的工拥有:grep:达成查找,sed,awk:都以流式编辑器,能够兑现查找和替换,况兼把替换的文本输出到显示屏上。

六周第二次课(十二月23日卡塔 尔(阿拉伯语:قطر‎

9.1 正则介绍_grep上

9.2 grep中

9.3 grep下

六周第一回课(1月二十八日卡塔尔

9.4/9.5 sed

正则就是有一定规律的字符串,有多少个特殊符号很关键(. * + ? | ),我们一向不仅仅能够用命令行工具grep/sed/awk去援用正则,并且仍然为能够把正则嵌入在nginx、apache、以致php、python编制程序语言个中,学好正则能够令你受用无穷!
一、grep/egrep 

豆蔻梢头、正则表明式

事先学习find命令时,就曾经触发过局地轻便的正则,那么大家以后来学学一些繁琐的正则。首先,我们如故来复习什么是正则表明式,看这么些教程先,一定要多看一次,最少知道正则大约长什么样体统。(转发至 卡塔尔正则便是有规律的风流浪漫串字符串,用来汇报三个一定的剧情,正则相符用来拍卖字符串,不太相符管理数学逻辑。学好正则对编写shell脚本有一点都不小的补益,全体的shell脚本大多数都提到到正则表达式。各类编程工具中也急需接纳正则。

用grep sed awk去处理字符串
能否写好shell脚本php
ngix配置文件中也会有正则
正则宗旨标识
。一个率性字符

  • 个*
    ? 零个或1个
  • 一个或多少个
    ^ 开头
    # 末尾

grep工具

怎么是正则

正则正是大器晚成串有规律的字符串

左右好正则对于编写shell脚本有异常的大帮忙

种种编制程序语言中都有正则,原理是如出生龙活虎辙的

本章将要学习grep/egrep、sed、awk

  1. 语法+选项
    语法: grep  [-cinvABC]  'word'  filename 
    -c :打字与印刷切合要求的行数
    -n :在出口相符必要的行的还要连同行号一齐输出 
    -v :打印不相符要求的行 
    -A :后跟多少个数字(有无空格都能够卡塔 尔(英语:State of Qatar),举个例子–A2则意味着打字与印刷切合须求的行以致下边两行 
    -B :后跟贰个数字,举例 –B2 则意味着打字与印刷相符供给的行以至地点两行  
    -C :后跟二个数字,比如 –C2 则代表打印相符必要的行以至前后各两行 
    -r : 会把目录下边全数的文本全体遍历

  2. 事例介绍
    过滤出含有有个别关键词的行并输出行号 grep -n 'root' 1.txt 
    过滤出不含有有些关键词的行并输出游号grep -n -v 'root' 1.txt
    过滤出具有满含数字的行 grep '[0-9]' 1.txt
    过滤出全体不包括数字的行 grep -v '[0-9]' 1.txt
    除去全数以'#'初步的行 grep -v '^#' 1.txt
    除去全部空行和以'#'初叶的行 grep -v '^$' 1.txt|grep -v '^#'
    过滤出以法语字母最早的行 grep '^[a-zA-Z]' 1.txt
    过滤出以非数字开始的行 grep '^[^0-9]' 1.txt
    过滤自便一个或七个字符 grep 'r.o' 1.txt; grep 'r*t' 1.txt; grep 'r.*t' 1.txt  
    . 表示自便多个字符;*意味着零个或多个后边的字符 ;.*意味着零个或八个随机字符,空行也富含在内 
    点名过滤字符次数 grep 'o{2}' 1.txt

  3. egrep
    egrep工具 是grep工具的扩充
    egrep 'o+' 1.txt   表示1个或1个以上前边字符
    egrep 'o?' 1.txt  表示0个可能1个前边字符
    egrep 'roo|body' 1.txt  相称roo或然相配body
    egrep 'r(oo)|(at)o' 1.txt 用括号表示叁个黄金年代体化
    egrep '(oo)+' 1.txt 象征1个或然三个 'oo' 

  4. . * + ? 总结
    . 表示率性四个字符(满含特殊字符卡塔 尔(英语:State of Qatar)
    * 表示零个或三个*前方的字符
    .* 表示猖獗个随机字符(包罗空行卡塔尔国

二、grep命令

grep [-cinvABC] 'word'

grep

  • [ ] grep [-cinvABC] 'word' filename
  • [ ] -c 行数
  • [ ] -i 不区分抑扬顿挫写
  • [ ] -n 显示行号
  • [ ] -v 取反
  • [ ] -r 遍历全体子目录
  • [ ] -A 后边跟数字,过滤出相符必要的行以至下边n行
  • [ ] -B 同上,过滤出切合须要的行以致地点n行
  • [ ] -C 同上,同有时候过滤出符合须要的行以致内外各n行

举个例子:新建二个grep目录,将etc/passwd目录下的剧情拷贝到grep目录下

[root@localhost ~]# mkdir grep
[root@localhost ~]# cd grep/
[root@localhost grep]# cp /etc/passwd .
[root@localhost grep]# ls
passwd

证实,gerp默许相称到的字符串注解为深黑,用which命令看一下,是带颜色自动展现的
图片 1
图片 2

  • grep -c
[root@localhost grep]# grep -c 'nologin' passwd
38
  • grep -n
    图片 3

  • grep -v
    图片 4

  • grep -r
    图片 5
    若果不加r则展现:

[root@localhost grep]# grep 'root' /etc/
grep: /etc/: 是一个目录
  • 经过grep遍历全体root文件并找到与password相关的

图片 6

  • grep -A2 会把带有root的行以至那行上边的两行打字与印刷出来

图片 7

  • grep -B2 会把带有root的行以致那行下面的两行打字与印刷出来

图片 8

  • grep -C2 会把带有root的行乃至那行上下各两行打字与印刷出来

图片 9

  • 代表1个或多个+前边的字符
    ? 表示0个或1个?前面包车型客车字符
    其中,+ ? grep不支持,egrep才支持。

(风度翩翩卡塔 尔(英语:State of Qatar)grep命令简要介绍

用于过滤文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。系统本身通过/etc/profile.d目录下的colorgrep.sh文件做了别名==grep --color,能够方便的显示找到的行。

用法: grep [选项]... PATTERN [FILE]...
grep -cniv ‘关键字(正则卡塔 尔(英语:State of Qatar)’ 文件路线
选项
-i 不区分朗朗上口写,暗中认可情形下grep不区分关键字大小写
-c 行数
-n 展现主要词所在行号
-v取反(使用超级多卡塔 尔(阿拉伯语:قطر‎
-r 遍历全体层级子目录
-A前面跟数字,过滤出相符必要的行以致上边包车型大巴n行
-B前边跟数字,过滤符合必要的行以至地方的n行
-C后边跟数字,过滤相符须求的行以致前后各n行

扩充正则 grep -E ==sed -r ==awk

数次练习,驾驭正则表明式
率先做个备选干活,把/etc/passwd文书档案拷贝到其余渠道下,如/tmp下做试验

-c:打字与印刷契合必要的行数

grep/egrep示例

  • [ ] grep -n 'root' /etc/passwd
  • [ ] grep -nv 'nologin' /etc/passwd

  • [ ] grep '[0-9]' passwd

图片 10

  • [ ] grep -v '[0-9]'/etc/inittab
  • grep -vn 举个例子,把不含数字的行打字与印刷出来,vim编辑时输入:set nu 提示行号

图片 11
图片 12
图片 13

  • [ ] grep -v '^#' /etc/inittab
    为了有协助测量试验,须求将/etc/inittab拷贝出来到gerp目录下
[root@localhost grep]# cp /etc/inittab ./  //拷贝的测试目录grep下

编辑inittab文件,把带#号的两行改过了,方便测验
图片 14
这在继承查找文件时,方便阅读
图片 15

  • [ ] grep '[^0-9]' inittab
    图片 16

  • [ ] grep '^[^0-9]' inittab
    图片 17

  • [ ] grep 'r.o' passwd //‘r.o’中.表示任性二个字符
    为便于测量试验需求vim个中的passwd文件,并增加r&o等特殊字符
    图片 18

  • [ ] grep 'oo' passwd passwd,代表零个或几个*前边的字符,0~n个o

    图片 19

[root@localhost grep]# grep 'oo*' passwd|wc -l
46 //结果相同
[root@localhost grep]# grep 'o*o' passwd|wc -l
46
  • [ ] grep '.' passwd passwd,.表示零个或多少个随机字符,空行也满含在内,那样就把passwd里面装有的行都相称到。
    图片 20

  • [ ] grep 'o{2}' passwd passwd,这里{},此中间为数字,表示前面包车型地铁字符要重复的次数,需求重申的是{}左右都要加上脱义字符,其它{}还能象征八个限量,{1,3}表示重复1到3次前边的字符,{1,}表示大于1次重复后边字符

    图片 21

    图片 22

  • [ ] egrep 'o{2}' /etc/passwd 等同于上边包车型大巴命令

== grep 'o{2}' passwd == grep -E 'o{2}' /etc/passwd

图片 23

图片 24

  • [ ] egrep 'o+o'passwd,+表示特别1个或许几个+前边的字符
[root@localhost grep]# grep 'o+o' passwd |wc -l
6
[root@localhost grep]# egrep 'o+o' passwd |wc -l
6

图片 25

  • [ ] egrep 'o?t' passwd,过滤出零个依然一个点名的字符

图片 26

  • [ ] egrep 'root|nologin' passwd,|表示仍然,可以有几个|

图片 27

== grep -E

[root@localhost grep]# egrep 'root|nologin' passwd|wc -l
39
[root@localhost grep]# grep -E 'root|nologin' passwd|wc -l
39
  • [ ] egrep '(oo){2}' passwd
    图片 28

二.  sed 
打字与印刷钦命行 sed '10'p -n 1.txt; sed '1,4'p -n 1.txt; sed '5,$'p -n 1.txt
打印带有有个别字符串的行 sed -n '/root/'p 1.txt 方可选用 ^ . * $等特殊符号
-e 能够完成同一时候举办四个任务 sed -e '/root/p' -e '/body/p' -n 1.txt 也能够用;达成  sed  '/root/p; /body/p' -n 1.txt
删除行 sed '/root/d' 1.txt;   sed '1d' 1.txt; sed '1,10d' 1.txt
交替 sed '1,2s/ot/to/g' 1.txt, 在那之中s就是替换的意趣,g为大局替换,不然只替换第三次的,/也得感到 #, @ 等
删除全部数字 sed 's/[0-9]//g' 1.txt
去除全数非数字  sed 's/[^0-9]//g' 1.txt
轮流五个字符串地方 head -n2 1.txt |sed 's/(root)(.*)(bash)/321/'
直白改革文件内容 sed -i 's/ot/to/g' 1.txt

(二卡塔 尔(英语:State of Qatar)基本用法示例

1、过滤出第一字root所在的行并呈现行号。

grep -n 'root' /etc/passwd

图片 29

能够见到有颜色标志关键字。

2、总结某黄金时代要害字现身的行数

grep -c 'nologin' passwd

图片 30

上边那多少个15实属nologin那几个关键字现身了十六回

3、找出某豆蔻梢头最首要字现身的行,然后把不曾现身首要字的行过滤出来

grep -vn 'nologin' passwd

图片 31

4、找出整个文件夹,在文书内容中招root。(注意与find命令找到的事物的分别卡塔 尔(英语:State of Qatar)

grep -r 'root' /etc

图片 32

深紫是文件的门路,寻觅出来的东西超级多,grep把/etc下有所满含root的文件中的root字所在的行和所在的文书音信都列了出去。

5、-ABC 功效演示,能列出关键字所在的行和接近的行。

grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd

图片 33

图片 34

图片 35
-C选项会把搜到的行的邻座的行都列出来,当然若是寻找的靶子在头上只怕文尾,就不会列相应的行。

-i:忽视大小写

sed工具使用

  • sed -n,选项表示只体现大家要打字与印刷的行,请看-n和未有-n的区分
[root@localhost ~]# mkdir sed
[root@localhost ~]# cd sed
[root@localhost sed]# cp ../grep/passwd test.txt
[root@localhost sed]# sed -n '/root/'p test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

图片 36

  • sed -r 这里-r和grep里面-E相像,还会有增加了技艺管用
    支持+,*,.,|或者,与等

    [root@localhost sed]# sed -n '/o+t/'p test.txt
    [root@localhost sed]# sed -nr '/o+t/'p test.txt
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    setroubleshoot:x:991:986::/var/lib/setroubleshoot:/sbin/nologin
    

    图片 37

  • sed打印某行

#sed -n '2'p test.txt //打字与印刷第二行

sed -n '1,$'p test.txt //打字与印刷全数行

sed -n '1,5'p test.txt //打印1~5行

图片 38

[root@localhost sed]# sed -n '1,5'p test.txt
root:x:0:0:root:/root:/bin/bash
adsda:deda:deded:road:ded
sasdda:deda:&&DE:r&o:r<xo:
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
  • sed -e 可以兑现多少人展览现
[root@localhost sed]# sed -e '1'p -e '/root/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost sed]# sed -e '1'p -e '/bus/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
  • sed -i 删除有些行

sed -i '1,10'd test.txt //删除1到10行

[root@localhost sed]# wc -l test.txt
48 test.txt
[root@localhost sed]# sed -i '1,10'd test.txt
[root@localhost sed]# wc -l test.txt
38 test.txt

删除和user(字符串)相关的

[root@localhost sed]# sed -i '/user*/'d test.txt
[root@localhost sed]# wc -l test.txt
32 test.txt
  • 改造字符或字符串,参数s表示替换的动作,g表示本行全局替换,倘诺不加g则只替换本行现身的三个,用法同vim

    #sed ‘1,10s/sbin/sbbin/g’ test.txt
    此处运用/作为分隔符,还是能是用别的特殊字符,#和&
    图片 39

  • 改换扩大 #sed -r '1,10s/ro+/r/g' test.txt |head//要想+那类特殊符号生效必需抬高-r,这里都以一时打印出来的结果,原有txt文档内容不变。

图片 40

  • 寻觅并替换
  • [ ] sed 's@/sbin/nologin@123@g'

图片 41

  • 轮流三个字符串的依次

    #sed -r 's/([^:]+):(.):([^:]+)/3:2:1/'
    // s是替换,^:非冒号字符串,.
    非特殊符号的字符串,这里会遍历到跟着八个冒号前。转义字符,替换成3,2,1的形式

图片 42

  • 删除文书档案中拥有的阿拉伯语字母
[root@localhost sed]# head test.txt |sed 's/[a-zA-Z]//g'
::0:0::/://
::::
::&&:&:<:
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
  • 在富有的行内容前面加上aaa:
  • [ ] head test.txt |sed -r 's/(.*)/aaa:1/'
    这里1或在&都能够象征字符串前面.
    图片 43

sed练习题:
把/etc/passwd 复制到/root/test.txt,用sed打字与印刷全体行
打印test.txt的3到10行
打印test.txt 中包含 'root' 的行
剔除test.txt 的15行以致以后全体行
删除test.txt中包含 'bash' 的行
替换test.txt 中 'root' 为 'toor'
替换test.txt中 '/sbin/nologin' 为 '/bin/login'
删去test.txt中5到10行中持有的数字
去除test.txt 中装有特殊字符(除了数字以致大小写字母卡塔尔
把test.txt中率先个单词和最终一个单词调换个地方置
把test.txt中冒出的第叁个数字和结尾一个单词替换个方式置
把test.txt 中首先个数字移动到行末尾
在test.txt 20行到末行最前边加 'aaa:'

grep+正则表明式(regexp卡塔尔国用法比如

一声令下写法:grep -(cirvnABC卡塔尔 'regexp' 文件或目录路径

精粹在regexp的写法,如何科学的把想要的事物用正则表明出来。

1、把含有0到9十三个数字大肆二个字符的队列出来

grep '[0-9]' passwd

图片 44

取反再寻找下
没了,表达passwd文件中每大器晚成行都包蕴数字
图片 45
此间表明[0-9]==[0123456789]

2、把不以#号开头的行打印出来,
这条命令常常用来查看程序照旧系统的安顿文件,这种文件经常有大段的以'#'最早的注明行,直接看很费力。

grep -vn '^#' /etc/ssh/sshd_config

图片 46

抑或有空行,大家要再把空行过滤掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

3、展现test.txt文书档案中包蕴r.o关键字的行

grep 'r.o' test.txt

图片 47

.号表示大肆多个字符,a-z,A-Z,0-9,特殊号等等。

4、搜索test.txt中形如'r*o'的行

grep 'r*o' test.txt

图片 48

在意那一个正则的相配结果,“r*o”能够象征的东西是只要以零个或专擅七个r开端o结尾的字符,ro肯定能够,o也得以因为他代表0个r和1个o,rrro,rro那几个自然能够。

-n:输出相符必要的行及行号。

三.  awk
截取文书档案中的某段 awk -F ':' '{print $1}' 1.txt
也能够运用自定义字符连接各样段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
合作字符或字符串 awk '/oo/' 1.txt
针对有些段匹配 awk -F ':' '$1 ~/oo/' 1.txt
每每相配 awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt
规范操作符==, >,<,!=,>=;<=  
awk -F ':' '$3=="0"'  1.txt; 
awk -F ':' '$3>="500"' 1.txt; 
awk -F ':' '$7!="/sbin/nologin"'  1.txt; 
awk -F ':' '$3<$4' 1.txt ; 
awk -F ':' '$3>"5" && $3<"7"' 1.txt 
awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt
awk内置变量 NF(段数)  N昂Cora(行数)
head -n3 1.txt | awk -F ':' '{print NF}' 
head -n3 1.txt | awk -F ':' '{print $NF}' 
head -n3 1.txt | awk -F ':' '{print NR}' 
打字与印刷20行以后的行awk 'NTiguan>20' 1.txt
awk -F ':' 'NR>20 && $1 ~ /ssh/'  1.txt 
转移某些段的值awk -F ':' '$1="root"' 1.txt
数学总括, 把第三段和第四段值相加,并给予第七段 awk -F ':' '{$7=$3+$4; print $0}' 1.txt
测算第三段的总额 awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也足以采纳if关键词 awk -F ':' '{if ($1=="root") print $0}' 1.txt

-v:打字与印刷不符合要求的行

awk练习题
用awk 打字与印刷整个test.txt (以下操作都以用awk工具完结,针对test.txt卡塔 尔(阿拉伯语:قطر‎
招来全体饱含 'bash' 的行
用 ':' 作为分隔符,查找第三段等于0的行
用 ':' 作为分隔符,查找第生机勃勃段为 'root' 的行,并把该段的 'root' 换来'toor' (能够会同sed一齐使用)
用 ':' 作为分隔符,打字与印刷最终风流倜傥段
打印行数大于20的具有行
用 ':' 作为分隔符,打字与印刷全体第三段小于第四段的行
用 ':' 作为分隔符,打印第黄金时代段以至最后大器晚成段,何况中间用 '@' 连接 (举个例子,第少年老成行应有是如此的花样 'root@/bin/bash' 卡塔尔
用 ':' 作为分隔符,把全副文书档案的第四段相加,求和

-A: 后边跟叁个数字(有无空格都可以卡塔 尔(英语:State of Qatar),-A2表示打字与印刷相符供给的行以致上面两行

-B:前面跟数字,-B3 打字与印刷切合要求的行以至地点三行。

-C:后边跟四个数字,-C24打字与印刷相符供给的行以至内外各四行

# grep -c 'a' 1.txt

# grep -A3 'a' 1.txt

# grep -n 'b' 1.txt   过滤带有关键词的行,展现行号。

# grep -nv 'ab' 1.txt   不适合要求的行及行号

# grep [0-9] 1.txt  过滤出全数满含数字的行

# grep -v [0-9] 1.txt 过滤出不分包数字的行

#grep  -v '^#' 1.txt   过滤掉全体已#始于的行

# grep -v '^#' 1.txt |grep -v  '^$'  过滤掉全部以空行和以#发端的行($代表最后,空行能够用^$表示卡塔 尔(阿拉伯语:قطر‎

sed 工具

sed -n 'a'p filename  a是叁个数字,表示第几行 ,-n 表示大家要打字与印刷的行,麻木不仁的剧情不显得。

# sed -n '2'p 1.txt 显示第二行内容

# sed -n '1,10'p 1.txt 显示1-10行内容

# sed -n '1,$'p 1.txt    展现全部行

 #sed -n '/aa/'p 1.txt 打字与印刷带有aa的行

加多-e能够完毕多样行事

#sed -e '1'p -e '/aabb/'p -n 1.txt   展现第风流洒脱行和含有aabb的行

查询时,清除某个行

sed '1' d 1.txt    呈现全体剧情时,清除第意气风发行。

sed '1,3'd 1.txt   扫除第后生可畏到第三行

 

编辑:操作系统 本文来源:将etc/passwd目录下的内容拷贝到grep目录下,打印指

关键词: