grep
grep 是linux 中最常用的“文本处理工具之一” 与sed awk 合称为linux中的三剑客!
grep 就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,可以把grep 理解为字符查找工具
grep 的全程为Global search Regular Expression and Print out the line 为全局搜索的意思
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
-i:在搜索的时候忽略大小写
[root@localhost ~] # cat /etc/passwd|grep -i "SSH"
sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
-n: 显示结果所在行号
[root@localhost ~] # cat /etc/passwd|grep -ni "SSH"
17:sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
-c:统计匹配到的行数
[root@localhost ~] # cat /etc/passwd|grep "root"
root:x:0:0:root: /root : /bin/bash
operator:x:11:0:operator: /root : /sbin/nologin
[root@localhost ~] # cat /etc/passwd|grep -c "root"
2
-w:匹配单个单词,如果字符串中包含这个单词,则不匹配
[root@localhost ~] # cat /etc/passwd.bak|grep -w "root"
root:x:0:0:root: /root : /bin/bash
rootroo:x:0:0:root: /root : /bin/bash #不会显示rootroo的
-e:实现多个选项的匹配。逻辑或or的关系
== egrep
== grep -E
[root@localhost ~] # cat /etc/passwd.bak|egrep -w "root|sshd"
root:x:0:0:root: /root : /bin/bash
rootroo:x:0:0:root: /root : /bin/bash
operator:x:11:0:operator: /root : /sbin/nologin
sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
-q: 静默模式,不输出任何信息 判断: echo $?
[root@localhost ~] # cat /etc/passwd.bak|grep -q "root"
- v :输出不带关键字的行(反向查询,反向匹配)
[root@localhost ~] # cat /etc/passwd.bak|grep -v "root"
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
halt:x:7:0:halt: /sbin : /sbin/halt
mail:x:8:12:mail: /var/spool/mail : /sbin/nologin
games:x:12:100:games: /usr/games : /sbin/nologin
ftp :x:14:50:FTP User: /var/ftp : /sbin/nologin
nobody:x:99:99:Nobody:/: /sbin/nologin
systemd-network:x:192:192:systemd Network Management:/: /sbin/nologin
dbus:x:81:81:System message bus:/: /sbin/nologin
polkitd:x:999:998:User for polkitd:/: /sbin/nologin
sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
postfix:x:89:89:: /var/spool/postfix : /sbin/nologin
chrony:x:998:996:: /var/lib/chrony : /sbin/nologin
|
sed
流编辑器,主要用来过滤和替换文本内容
工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式。然后再将下一行读入模式空间进行处理输出,以此类推,直至最后一行。
用法:
sed [选项] ‘命令’ file_name
选项:
1 2 |
选项 描述
-n 不打印模式空间
|
grep命令使用简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着
另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。
有一点要注意,必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
grep -n pattern files 即可显示行号信息
grep -c pattern files 即可查找总行数