分享

正则表达式练习题

 MyShow.Li 2011-03-04

正则表达式练习题 收藏

正则表达式及字符处理

在任务下面的横线上写下您的解决方案,您写出您的命令而不是命令的输出,答案在实验最后,但是要先试着自己解决,可以使用man page来帮助您解决问题。

任务::

1.使用grep显示出/usr/share/dict/words文件中含有某参数的行,例如显示出所有含有fish的行:

 
[~]# grep fish /usr/share/dict/words  --color

2.使用grep的man page作为帮助,输出任何包含fish的所有行,还要输出紧接着这行的上下各两行的内容:


[~]# grep -n -2 fish /usr/share/dict/words  --color
[~]# grep -n -A 2 -B 2 fish /usr/share/dict/words  --color


3.使用grep的man page作为帮助,找出相应的命令,来显示出在words文件中有多少行含有fish。

[~]# grep  fish /usr/share/dict/words  --color | wc -l
805
[~]# grep -c fish /usr/share/dict/words  --color
805
[~]#

4.使用grep的帮助文件,找出相应的命令,显示出那些行含有fish,并将行号一块输出,看一看starfish在哪行?

 
[~]# grep -n starfish /usr/share/dict/words  --color
390384:starfish
390385:starfishes
[~]#


5.想列出/usr/share/dict/words中包含先有字母t然后有一个元音字母,之后是sh的单词,命令为:
[~]# grep -w 't[aeiou]sh' /usr/share/dict/words  --color
tash
tosh
tosh-up
tush
[~]# grep  '\<t[aeiou]sh\>' /usr/share/dict/words  --color
tash
tosh
tosh-up
tush
[~]#

6.在/usr/share/dict/words文件中,创建可以符合
 abominable
 abominate
 anomie
 atomize
 a(b|n|t)omi(na(bl|t)|z)?e
的正则表达式,但是不要选到别的单词。
[~]# grep -wE 'a(b|n|t)omi(na(bl|t)|z)?e' /usr/share/dict/words  --color
abominable
abominate
anomie
atomize
[~]#
 

[~]# grep -wE 'abomina(bl|t)e|a(n|t)omiz?e' /usr/share/dict/words  --color
abominable
abominate
anomie
atomize
[~]#

7.在/usr/share/dict/words文件中包含多少先有字母t然后有一个元音字母,之后是sh的单词,只输出数量。
[~]# grep -cE 't[aeiou]sh' /usr/share/dict/words  --color 418
[~]# grep  't[aeiou]sh' /usr/share/dict/words  --color | wc -l


8.列出/usr/share/dict/words中刚好包含16个字母的单词:


[~]# grep -cE '^[a-Z]{16}$' /usr/share/dict/words  --color
5330
[~]#


9.我们将要使用/usr/share/doc文件夹来完成我们的下几个任务。

列出/usr/share/doc/bash-* 文件夹中,所有包含单词expansion的文件,
[~]# grep -rl 'expansion' /usr/share/doc/bash-3.2/ | wc -l
22
[~]# for i in $(find /usr/share/doc/bash-3.2/ -type f) ;do grep -l 'expansion' $i ;done | wc -l
22
[~]#

10.显示出“Linux”在/usr/share/doc/bash-* 文件夹的文件中出现的次数,但是不要显示没有这个单词的文件。提示:先列出所有的文件,然后想如何使输出符合要求:


[~]# cat my.sh
#!/bin/bash

for i in $(find /usr/share/doc/bash-3.2/ -type f )
do
        if grep -lw Linux $i
        then
                sed -r 's/[^a-Z]+/\n/g' $i | grep -cw Linux
        fi
done
[~]# find /usr/share/doc/bash-3.2/ -type f |xargs -i bash -c "grep -lw Linux {} && sed -r 's/[^a-Z]+/\n/g' {} | grep -cw Linux"
[~]# find /usr/share/doc/bash-3.2/ -type f -exec bash -c  "grep -lw Linux {} && sed -r 's/[^a-Z]+/\n/g' {} | grep -cw Linux" \;
[~]#
[~]# find /usr/share/doc/bash-3.2/ -type f |xargs -i bash -c "grep -lw Linux {} && grep -ow Linux {} | wc -l"


11. 统计系统中每种shell的使用人数

[~]# awk -F: '{print $NF}' /etc/passwd | sort | uniq -c
      1
      5 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     32 /sbin/nologin
      1 /sbin/shutdown

[~]# awk -F: '{ary[$NF]++}END{for(i in ary)print ary[i],i}' /etc/passwd
1
1 /bin/sync
5 /bin/bash
32 /sbin/nologin
1 /sbin/halt
1 /sbin/shutdown
[~]#

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多