grep:基本正则表达式,-E -F
egrep:扩展正则表达式,-G -F
fgrep: 不支持正则表达式,-F
egrep:
支持扩展的正则表达式实现类似于grep文本过滤功能; grep -E
egrep [OPTIONS] PATTERN [FILE….]
-l, -o, -v, -q, -A, -B, -C
-G:支持基本正则表达式
扩展正则表达式的元字符:
字符匹配:
. :任意单个字符
[]: 指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
次数匹配:
*:任意次,0,1或多次;
?:0吃货1次,其前的字符是可有可无的;
+ :其前字符至少1次;
{m}: 其前的字符m次;
{m,n}:至少m次,至多n次;
{0,n}
{m,}
位置锚定
^:行首锚定;
$:行尾锚定
\>,\b: 词尾锚定;
分组及引用:
():分组:括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
后向引用:\1,\2,….
或:
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)" /proc/meminfo
2、显示当前系统上root、centos或user1用户的相关信息;
~]# grep -E"^(root|centos|user1)\>" /etc/passwd
3、找出/etc/rc.d/init.d/functions文件中某些单词后面跟一个小括号的行;
~]# grep -E -o "[_[:alnum:]]+\(\)" /etc/passwd
4、使用echo命令输出一绝对路径,使用egrep取出基名;
~]# echo /etc/sysconfig/ |grep -E-o "[^/]+/?$"
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/passed文件中用户名同shell的行;
~]# grep -E "^([^:]+\).*\1$" /etc/passwd
fgrep :不支持正则表达式元字符;
当无需要用到元字符取编写模式是,使用fgrep 必能更好;
文本查看仅处理工具:wc, cut , sort, unig, diff, patch
wc: word count
wc:[OPTION]…[FILE]…
-l:lines
-w:words
-c: bytes
cut:
cut OPTION…[FILE]…
OPTION:
-d CHAR:以指定的字符为分隔符
-f FIELDS: 挑选出的字段;
#:指定的单个字段
##:连续的多个字段;
#‘#:离散的多个字段;
sort:
sort [OPTION]…[FILE]…
-n 基于数值大小而非字符进行排序;
-t CHAR; 指定分隔符:
-k#: 用于排序比较的字段;
-r :逆序排序;
-f: 忽略字符大小写
-u: 重复的行只保留一份;
重复行
uniq:
report or omit repeated lines报告或移除重复的行
uniq [OPTION]…[INPUT [OUTPUT]]
-c: 统计每一行重复出现的次数
-u:仅显示未重复非行
-d:仅显示重复过的行;
diff: compare files line by line 逐行比较文件中的内容
diff [OPTION]…FILES
diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE> /PATH/TO/PATCH_FILE
-U:使用unfied机制,即显示要修改的行的上下文,默认为3行;
patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_ILE
l练习:取出ifconfig eno16777736命令结果中的ip地址;
原创文章,作者:shadow,如若转载,请注明出处:http://www.178linux.com/64536