egrep及文本处理工具
- egrep
- 支持扩展正则表达式
- 使用方式和选项和grep一样
- 扩展正则表达式的元字符
- 字符匹配
- 次数匹配
- 位置锚定
- 分组或匹配
- 注:以上元字符和grep一样,但是转义字符“\”都没有了,除了:\<,\b,\>,\1以外
- 或:匹配整个左边或者整个右边
- a|b:匹配a或者b
- C|cat:匹配C或者cat
- (C|c)at:匹配Cat或者cat
练习:
1,找出/proc/meminfo文件中,所有大写或小写s开头的行,至少三种方式
答案:
- grep -i "^s" /proc/meminfo
- grep "^[sS]" /proc/meminfo
- grep -E "^(s|S)"
2,显示当前系统上,root,centos和user1用户的默认shell
答案:grep -E "^(root|centos|user1)\>" /etc/passwd
3,找出/etc/rc.d/init.d/functions文件中某个单词后面跟一个小括号的行
答案:grep -E "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions。注:这里括号前面加“\”表示括号本身。如果不加“_”,会把“_”左右当成两个单词。
4,使用echo命令输出一个绝对路径,使用egrep取出基名
答案:echo "/etc/sysconfig" | egrep -o "[^/]+/?$"
进一步,取出路径名,同dirname命令的结果:
答案:
5,找出ifconfig命令结果中1-255之间的数值
答案:ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
6,找出ifconfig命令结果中的IP地址
答案:网上查
7,添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行
答案:
useradd bash
useradd testbash
useradd basher
useradd -s /sbin/nologin nologin
grep -E "^([^:]+\>).*\1$" /etc/passwd
- fgrep:不支持正则表达式元字符,f代表fast
- 文本查看及处理工具
- wc:word count/统计文件中的行数,单词数,字节数
- wc [OPTIONS]... [FILE]...
- -l:只显示行数
- -w:只显示单词数
- -c:只显示字节数
- cut:文本截取工具
- -d CHAR:指定分隔符,默认为空格;-d和CHAR之间可以没有空格
- -f:指定挑选出的字段/列
- -f #:单个字段
- -f #-#:连续字段
- -f #,#:离散字段
- -f 1,3-5,7:1,3,4,5,7字段
- sort:排序工具
- 类似工具都不会改变原文件内容,只是将结果输出
- -t CHAR:指定分隔符
- -k #:用于排序比较的字段
- -n:根据数值大小进行排序,2在10前面,否则10在2前面
- 基于UID对/etc/passwd中的行进行排序:cut -d: -f3 /etc/passwd | sort -n,但是这样截取之后,就不是原文件内容了,只显示第三列,所以应该sort -t: -k3 -n /etc/passwd
- -r:逆序排序
- -f:忽略字符大小写
- -u:重复的行只保留一份
- 综合:cut -d: -f7 /etc/passwd|sort -u|wc -l,显示所有用户的默认shell总共有多少种
- uniq:报告或移除重复的行
- -c:显示每一行出现的次数
- -u:只显示没有重复过的行
- -d:只显示重复过的行
- diff:逐行比较文件的不同之处
- -u:使用unified机制,即显示要修改的行的上下文,默认为上下各3行
- diff OldFile NewFile > PatchFile
- patch:向文件打补丁
- patch [OPTIONS] -i PatchFile OldFile
- patch [OPTIONS] OldFile < PatchFile
- wc:word count/统计文件中的行数,单词数,字节数
练习:取出ifconfig eno16777736命令结果中的IP地址