1. grep语法及其参数说明
grep是文本搜索工具,能根据用户指定的'PATTERN模式'目标文本进行逐行匹配检查,注意grep默认会以 行 为单位打印匹配到的行.
以下是grep命令的语法及常用参数:
grep [OPTIONS] PATTERN [FILE...] 选项 模式 文件 ###参数及含义 --color=auto #<==匹配成功显示颜色 -v #<==排除 -i #<==忽略大小写 -n #<==显示匹配行及其行号 -o #<==仅显示匹配到的字符串 -w #<==只匹配过滤的单词 -q #<==静默参数,不输入任何信息 -r #<==递归过滤目录下的文件 -A #<==after,后n行 -B #<==before,前n行 -C #<==前后各n行 -E #<== 相当于egrep,同时过滤多个,中间使用 | 分隔
给grep命令使用时匹配到的字符添加颜色:
echo "export GREP_COLORS='ms=38;5;214;48;5;30'" >> ~/.bashrc echo "alias grep='grep --color=auto -E'" >> ~/.bashrc source ~/.bashrc
2. grep命令常用用法
######命令参数常用用法: [root@test ~]# cat a.txt sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -n 'ntp' a.txt #<==显示字符串所在行及其行号 3:ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -v '^ntp' a.txt #<==排除用法,将以ntp开头的行排除后打印输出 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin [root@test ~]# grep -i 'Privilege' a.txt #<==忽略大小写,输出字符串匹配到的行 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@test ~]# grep -o 'Privilege' a.txt #<==仅仅显示匹配到的字符串 Privilege [root@test ~]# grep -w 'Privilege' a.txt #<==很少用,匹配单词,但有时用于脚本中匹配指定的用户 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@test ~]# seq 10 >a.txt [root@test ~]# grep -E "1|2" a.txt #同时过滤多个字符串所在的行 [root@test ~]# grep -A 3 '5' a.txt #<==显示字符串5及后面3行 5 6 7 8 [root@test ~]# grep -B 3 '5' a.txt #<==显示字符串'5'及之前3行 2 3 4 5 [root@test ~]# grep -C 3 '5' a.txt #<==显示字符串'5'及前后3行 2 3 4 5 6 7 8 ######配合正则表达式常用用法(注意:使用egrep就无需 反斜线转义,grep使用正则需要 转义) [root@test ~]# cat a.txt abxy xay xxxxxxxxy x [root@test ~]# grep 'x*?y' a.txt #<==注意,这里不会匹配到任何内容,此时?代表单个字符 [root@test ~]# grep 'x*y' a.txt #<==贪婪模式(最长匹配原则)匹配 abxy xay xxxxxxxxy [root@test ~]# grep 'x*?y' a.txt #<==此时问号是正则,代表匹配前面字符0次或1次 abxy xay xxxxxxxxy [root@test ~]# grep 'a.*y' a.txt #<==.*代表任意内容 abxy xay [root@test ~]# grep 'x?y' a.txt abxy xay xxxxxxxxy [root@test ~]# grep 'x+y' a.txt #<==+号匹配前面字符x至少1次 abxy xxxxxxxxy #####匹配次数 [root@test ~]# tail -5 /etc/passwd >a.txt [root@test ~]# cat a.txt tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -o '[a-z]{3}t' a.txt #<==匹配文本中,t字符串的前面有3个随意小写字母的字符串 ount abrt abrt arat empt post post [root@test ~]# grep -o '[a-z]{3,5}t' a.txt #<==匹配,t字符串的前面有3-5个小写字母的字符串 [root@test ~]# grep -o '[a-z]{,5}t' a.txt #<==匹配,t字符串的前面有至多5个小写字母的字符串 [root@test ~]# grep -o '[a-z]{3,}t' a.txt #<==匹配,t字符串的前面有至少3个小写字母的字符串 #####位置锚定 [root@test ~]# cat a.txt tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -o '<[a-z]{3}t' a.txt #<==必须出现单词首部 abrt abrt empt post post [root@test ~]# grep -o '<[a-z]{3}t>' a.txt #<==锚定 单词尾部 abrt abrt [root@test ~]# ifconfig eth0|sed -n '2p'|grep -o '<10.0.0.30>' #<==grep功能不擅长过滤此种内容 10.0.0.30 ######生产常用于去除空行和以#号开头的行 [root@test ~]# grep -Ev "^$|^#" /etc/yum.repos.d/CentOS-Base.repo