文本处理工具: Linux上文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern)工具; grep:基本正则表达式,-E,-F egrep:扩展正则表达式, -G,-F grep:不支持正则表达式, sed:stream editor, 流编辑器;文本编辑工具; awk:Linux上的实现为gawk,文本报告生成器(格式化文本); 正则表达式:Regual Expression, REGEXP 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能; 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE 元字符:\(hello[[:space:]]\+\)\+ 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,前后各#行 基本正则表达式元字符: 字符匹配: . :匹配任意单个字符; []:匹配指定范围内的任意单个字符; [^]:匹配指定范围外的任意单个字符; [:digit:]、[:lower:]、[:upper:]、[:alpha:]、 [:alnum:]、[:punct:]、[:space:] 匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式; *:匹配其前面的字符任意次;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 ... He loves his lover. He likes his lover. She likes her liker. She loves her liker. ~]# grep "\(l..e\).*\1" lovers.txt 后向引用:引用前面的分组括号中的模式所匹配到的字符; 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 fgrep:不支持正则表达式元字符; 当无需要用到元字符去编写模式时,使用fgrep必能更好;
1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
[root@localhost ~]# cp -r /etc/skel /home/tuser1 [root@localhost ~]# chmod 700 /home/tuser1/
2、编辑/etc/group文件,添加组hadoop。
[root@localhost ~]# vim /etc/group hadoop:x:1200: [root@localhost ~]# tail -1 /etc/group hadoop:x:1200:
3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
hadoop:x:1102:1200::/home/hadoop:/bin/bash [root@localhost ~]# tail -1 /etc/passwd hadoop:x:history1102:1200::/home/hadoop:/bin/bash
4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
[root@localhost home]# chmod 700 /home/hadoop/
5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
[root@localhost home]# chown -R hadoop:hadoop /home/hadoop [root@localhost home]# ll total 0 drwx------. 2 hadoop hadoop 59 Dec 14 10:26 hadoop drwx------. 2 huangh huangh 79 Dec 9 06:35 huangh drwx------. 2 mageia mageia 59 Dec 14 09:39 linux drwx------. 2 1005 distro 59 Dec 14 09:37 mandriva drwx------. 2 openstack clouds 59 Dec 14 09:52 openstack drwx------. 2 peguin peguin 59 Dec 14 09:43 peguin drwx------. 2 slackware distro 59 Dec 14 09:43 slackware drwx------. 2 tom tom 59 Dec 14 08:41 tom drwx------. 2 root root 59 Dec 14 10:21 tuser1
6、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式;
grep '^[sS]' /proc/meminfo grep -i '^s' /proc/meminfo grep -E '^s|S' /proc/meminfo
7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
[root@localhost ~]# grep '/sbin/nologin' /etc/passwd|cut -d: -f1
8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
[root@localhost hadoop]# grep '/bin/bash' /etc/passwd
9、找出/etc/passwd文件中的一位数或两位数;
[root@localhost ~]# grep '\<[0-9]\{1,2\}\>' /etc/passwd
10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
[root@localhost ~]# grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
[root@localhost ~]# grep '^#[[:space:]]\{1,\}[^[:space:]]\{1,\}' /etc/rc.d/rc.sysinit
12、打出netstat -tan命令执行结果中以‘LISTEN’结尾的行;
[root@localhost ~]# netstat -tan|grep '\<LISTEN\>[[:space:]]*$'
13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;
[root@localhost ~]# grep '^\([[:alnum:]]\{1,\}\):.*\1$' /etc/passwd [root@localhost ~]# grep -E "^([^:]+\>).*\1$" /etc/passwd
14、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
[root@localhost ~]# grep -v '/sbin/nologin$' /etc/passwd
15、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
[root@localhost ~]# grep '/bin/bash$' /etc/passwd
原创文章,作者:sheng,如若转载,请注明出处:http://www.178linux.com/64030