Linux:grep 用法详解

grep 用法详解
选项:
                            --color=auto: 对匹配到的文本着色显示;
                            -v: 显示不能够被pattern匹配到的行;
                            -i: 忽略字符大小写;
                            -o: 仅显示匹配到的字符串;
                            -q: 静默模式,不输出任何信息;
                            -A #:after, 后#行
                            -B #: before, 前#行
                            -C #:context, 前后各#行


                            -E:使用ERE;






基本正则表达式元字符:
字符匹配:
. :匹配任意单个字符
[]:匹配指定范围内任意单个字符
[^]:匹配指定范围外的单个字符


[:digit:] [:alpha:] [:lower:] [:upper:] [:alnum:] [:punct:] [:space:]


次数匹配:
*:匹配前面的字符任意次                    --正则表达式默认工作在贪婪模式
.*:匹配任意长度的任意字符
grep 'a.*y' test.txt
\?:匹配前面的字符0次或一次(前面的字符可有可无)
grep 'x\?y' test.txt
\+:匹配前面的字符至少一次
grep 'x\+y' test.txt
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符m到n次
\{,m\}:匹配前面的字符至多m次
\{n,\}:匹配前面的字符至少n次
位置锚定:
^:行首锚定
^root
$:行尾锚定
root$
^$:空行
^[[:space:]]*$
\<:词首锚定
\>:词尾锚定
分组:
\(\):
\(xy\)\+  --匹配xy至少一次


后向引用:引用前面的分组括号中的模式所匹配到的字符,
  \1 引用最外侧分组括号之间的模式;\2引用次外侧...\n 引用...




练习题:
1、显示/proc/meminfo文件中以大小s开头的行(要求使用2中方式)--考点--①-i 忽略大小写②[]匹配指定范围内的字符③^行首锚定
[root@db01 ~]# grep -i '^[s]' /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       4063228 kB
SwapFree:        4063228 kB
Shmem:            156288 kB
Slab:             167192 kB
SReclaimable:     121572 kB
SUnreclaim:        45620 kB
[root@db01 ~]# grep '^[Ss]' /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       4063228 kB
SwapFree:        4063228 kB
Shmem:            156288 kB
Slab:             167192 kB
SReclaimable:     121572 kB
SUnreclaim:        45620 kB
You have new mail in /var/spool/mail/root
[root@db01 ~]# 


2、显示/et/passwd文件中不以/bin/bash结尾的行    --考点--①$锚定行尾 ②-v 匹配取反
[root@db01 ~]# grep -v '/bin/bash$' /etc/passwd
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
operator:x:11:0:operator:/root:/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:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
You have new mail in /var/spool/mail/root




3、显示/etc/passwd文件中ID号最大的用户的用户名--考点--①sort -t:以:分割;②-k3指定第3拦③-n按大小排序④tail -1显示最后一行⑤cut -d:用:切割⑥-f1表示第一列⑦⑧⑨
[root@db01 ~]# sort -t: -k3 -n /etc/passwd|tail -1|cut -d: -f1
chenxu
同理如果用sort -in反向排列,则如下代码输出相同结果
[root@db01 ~]# sort -rnk 3 -t: /etc/passwd|head -1|cut -d: -f1 
chenxu



=============由于前面的内容没看,后续再更新后面的题目===============
4、如果root存在,显示其默认的shell程序




5、找出etc/passwd中的两位或3位数


6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存在非空白字符的行


7、找出“netstat -tan”命令的结果中以‘LISTEN’后跟0,1或多个空白字符结尾的行


8、添加用户 bash,basher,以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行





猜你喜欢

转载自blog.csdn.net/administrator4/article/details/80989524
今日推荐