Week4 正则表达式及grep命令

基本正则表达式元字符:

            字符匹配:
                .:匹配任意单个字符
                    grep "r..t" /etc/passwd                
                    []:匹配指定范围内任意单个字符                
                    [^]:匹配指定范围外任意单个字符                    
                        [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
                    grep "r[[:alpha:]][[:alpha:]]t"

            匹配次数:写在要指定其出现次数的字符的后面
                *:匹配其前面的字符任意次 0,1,多次
                    grep "x\+y"
                        abxy
                        aby
                        xxxxxy
                        yab
                .*: 匹配任意长度的任意字符                
                \?:匹配其前字符0次或1次                
                \+:匹配其前的字符1次或多次,即字符出现至少1次                
                \{m\}:匹配其前字符m次                
                \{m,n\}:匹配其前字符至少m次,至多n次                    
                \{0,n\}:至多n次                    
                \{m,\}:至少m次
            位置锚定:
                ^:行首锚定 写在模式最左侧                
                $:行尾锚定 写在模式最右侧
                ^PATTERN$:用于PATTERN来匹配整行;
                    ^$:空白行;
                    ^[[:space:]]*$:空行或包含空白字符的行;                
                    \< 或 \b:词首锚定,用于单词模式的左侧;                
                    \> 或 \b:词尾锚定,用于单词模式的右侧;                
                    \<PATTERN\>:匹配完整单词;
                单词:非特殊字符组成的连续字符(字符串)都称为单词;
                
            分组及引用                
            \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理 反斜线表示转义                    
                \(xy\)*ab


                Note:
                    分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
                    \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
                    \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
                    \3
                    ...

grep命令: Global search REgular expression and Print out the line

    作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;       

    模式:由正则表达式的元字符及文本字符所编写出的过滤条件;    grep  [OPTIONS]  PATTERN  [FILE...]
    grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]

        OPTIONS:
            --color=auto:对匹配到的文本着色后高亮显示;
            -i: ignorecase 忽略字符大小写
            -o: 仅显示匹配到的字符串本身
            -v: invert-match 反向匹配 显示未被匹配到的行
            -E:支持使用扩展的正则表达式元字符;
            -q: --quiet, --silent:静默模式,即不输出任何信息;

            -A #:after, 后#行
            -B #:before,前#行
            -C #:context,前后各#行

egrep命令:

支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E
egrep [OPTIONS] PATTERN [FILE...]
        选项:
            -i, -o, -v, -q, -A, -B, -C
            -G:支持基本正则表达式 

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

            次数匹配
                *:任意次 0,1,多次
                ?:0次或1次 
                +:其前字符至少1次
                {m}:其前字符m次
                {m,n}:其前字符至少m次至多n次
                    {0,n}
                    {m,}
            位置锚定
                ^ 行首锚定 
                $ 行尾锚定
                \< \b 词首锚定
                \> \b 词尾锚定
            分组及引用
                (): 分组 括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中 
                后向引用:\1, \2, ...
            或
                a|b:a或者b;                    
                C|cat:C或cat
                (c|C)at:cat或Cat

练习

1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

cp /etc/skel /home/tuser1 
chmod -R go=--- /home/tuser1

2、编辑/etc/group文件,添加组hadoop。

echo "hadoop:x:2017:" >> /etc/group

3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

echo "hadoop:x:1008:2017::/home/hadoop:/bin/bash" >> /etc/passwd

4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

cp -r  /etc/skel /home/hadoop 
chmod go=--- /home/hadoop

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

chown  -R  hadoop:hadoop  /home/hadoop

6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

grep "^[sS]" /proc/meminfogrep -i "^s" /pro/meminfo

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

grep "/bin/bash" | cut -d: -f1

9、找出/etc/passwd文件中的一位数或两位数;

grep -o  "\<[0-9]\{1,2\}\>" /etc/passwd

10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

grep "^[[:space:]]\+" /boot/grub2/grub.cfg

11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

grep "^#[[:space:]]\+[^[:space:]]\+" /boot/grub2/grub.cfg

12、打出netstat -tan命令执行结果中以‘LISTEN’,后跟空白字符结尾的行;

netstat -tan | grep 'LISTEN[[:space:]]\+$'

13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

grep -E "^([^:]+).*\1$" /etc/passwd

原创文章,作者:alonedreamer,如若转载,请注明出处:http://www.178linux.com/68189

(0)
alonedreameralonedreamer
上一篇 2017-02-11 14:16
下一篇 2017-02-12 10:47

相关推荐

  • BT雷人的程序语言

    这个世界从来都不会缺少另类的东西,人类自然世界如此,计算机世界也一样。编程语言方面,看过本站《6个变态的C语言Hello World程序》的朋友们一定对BT和另类不会陌生,但那都是些小儿科,真正的BT和另类要是从语言级上来完成。让我们来看看其中一个比较另类的语言BrainFuck。看到这个程序语言的名字,请不要以为这是一个搞笑的语言,这是一个“严肃事情”,请…

    Linux干货 2015-04-03
  • DNS and BIND 介绍及安装

    DNS DNS是什么 为什么要用DNS 域名 BIND DNS是什么 DNS:Domain Name System,域名系统DNS作为域名和IP地址相互映射的一个分布式数据库,能够让用户更方便的访问互联网。它的正向映射是吧一个主机和IP地址关联起来,它的反向映射则是IP地址到主机名。DNS协议运行在UDP协议上,使用53端口。 为什么要用DNS 连接到互联网…

    Linux干货 2016-05-28
  • MySQL慢日志监控脚本实例剖析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1577326        公司线上的 MySQL 慢日志,之前一直没有做好监控。趁着上周空闲,我就把监控脚本写了下,…

    Linux干货 2016-08-15
  • Linux网络配置

    配置网络 实现网络组测试网络网络工具     基本网络配置将Linux主机接入到网络,需要配置网络相关设置。一般包括如下内容:主机名IP/netmask路由:默认网关DNS服务器主DNS服务器次DNS服务器第三DNS服务器 网络配置方式静态指定:ifcfg: ifconfig, route, netstatip: object {link…

    Linux干货 2017-08-19
  • 马哥教育网络班21期-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:是将广播域划分为多个小的冲突域,但广播域没有变。工作在OSI模型的数据链路层,端口很少;基于软件;可以处理上层事务。集线器:对接收到的信号进行再生整形放大,扩大网络传输距离;属于纯硬件网络底层设备,工作在OSI模型的物理层,不具有交换机的”智能记忆”和”学习”的能力;也不具…

    Linux干货 2016-08-29
  • ps查看进程

    ps命令 ps [OPTION]支持三种选项UNIX选项 如-A -eBSD选项 如aGNU选项 如–help选项:默认显示当前终端中的进程a 选项包括所有终端中的进程x 选项包括不连接终端的进程u 选项显示进程所有者的信息f 选项显示进程树,相当于 –forestk|–sort 属性 对属性排序,属性前加- 表示倒序o …

    2017-12-19

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-30 14:15

    非常好,正则在手,天下我有,继续加油!