grep: 文本过滤(模式:pattern)工具; grep,egrep,fgrep
sed: stream editor,文本编辑工具.
awk: Linux上的实现文本报告生成器.
PCRE(Perl Compatible Regular Expressions) //ls | grep ...
grep: Global search REgular expression and Print out the line .
//把对应的能匹配到的行显示出来
作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查;打印匹配到的行.
模式:由正则表达式字符及文本字符所编写的过滤条件.
REGEXP(正则表达式):由一类特殊字符及正常的文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能 扩展正则表达式:ERE
正则表达式元字符: 正则表达式引擎 基本正则表达式:BRE
grep [OPTIONS] PATTERN [FILE ...] grep "...t" /etc/passwd
alias grep= 'grep --color = auto' 默认情况下,正则表达式工作于贪婪模式,
grep --color=auto root /etc/passwd [能匹配多少就匹配多少]
选项:
--color=auto : 对匹配到的文本着色显示
-v : 显示不能够被匹配到的行,[被pattern匹配]
-E: 使用扩展正则表达式.(egrep)
-G: 使用基本正则表达式(grep)
-F: 使用固定字符串(fgrep)
-P: 使用perl正则表达式(pgrep)
-i : 匹配检查时忽略字符大小写
-o: 仅显示匹配到的字符串
-q: 检查匹配以后不向屏幕输出任何信息
-A#: after,显示匹配到的行及行后#行
-B#: before;显示匹配到的行及行前#行
-C#: context;上下文前后各#行
基本正则表达式元字符:
字符匹配: .:匹配任意单个字符.
[ ]:匹配指定范围内的任意单个字符.
[^]:匹配指定范围外的任意单个字符.
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数.
*:匹配前面的字符任意次;(0次,1次或多次)
grep "x*y" grep.txt //abxy xay xxxxxxy都能被匹配. *表示x可以没有.
.*:任意长度的任意字符.
\?:匹配其前面字符0次或1次, 即前面字符可有可无. //grep 'x\?y' grep.txt
\+:匹配其前面的字符至少1次.
\{m\}:匹配前面的字符m次.(你指定多少次就是多少次)
\\ grep '[[:alpha:]]\{3\}t' /etc/passwd
\{m,n\}:匹配前面的字符至少m次,至多n次; //grep '[[:alpha:]]\{1,3\}t' /etc/passwd
\{0,n\}:匹配前面的字符至多n次,可以没有
\{m,\}:匹配前面的字符至少m次,至多不限
位置锚定:^:行首锚定,用于模式的最左侧,
$:行尾锚定,用于模式的最右侧,
^PATTERN$:用于模式匹配整行,
^$:空行.
^[[:space:]]*$:空白行.
\<或\b:词首锚定,用于单词模式的左侧.
\>或\b:词尾锚定,用于单词模式的右侧.
\<PATTERN\>单词锚定,匹配整个单词.
分组:将一个或多个字符捆绑在一起,当作一个整体进行处理; \(\): \(xy\)*ab:
后向引用:引用前面的分组括号中的模式所匹配字符.(而非模式本身)
note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,
这些变量名的方式为: \1,\2,\3, ...
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符.
\(ab\+\(xy\)*\): grep '\([[:alpha:]]\{1,3\}t\>\).*\1' /etc/passwd
\1: ab\+\(xy\)*
\2: xy
后向引用引用的是前面的分组括号中的模式所匹配到的字符.
grep -v '/bin/bash$' /etc/passwd
grep '^[Ss]' /proc/meminfo
如果root用户存在,显示其默认shell.
#id root &> /dev/null && grep '^root\>' /etc/passwd|cut -d: -f1
找出/etc/passwd中的两位或三位数
#grep -o "\<[0-9]\{2,3\}\>" /etc/passwd
至少以一个空白字符开头的且后面存非空白字符的行
#grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg //centos7
#grep "^[[:space:]]\+[^[:space:]]" /etc/grub.conf //centos6
找出netstat -tan以LISTEN后跟0、1或多个空白字符结尾
#netstat -tan | grep "LISTEN[[:space:]]*$"
添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行
#grep "^\([[:alnum:]]\t\>\).*\1$" /etc/passwd
egrep及扩展正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE ...]
扩展正则表达式元字符:
字符匹配: . 锚定:^
[ ] $
[^] \<, \b
次数匹配:* \>, \b
+ :一次或多次 分组:( )
? :零次或一次 后向引用:\1,\2, ...
{m}:匹配m次 或者:a|b
{m,n}:至少m,至多n次 C|cat : C或cat
#egrep '^(root|bash)\>' /etc/passwd|cut -d: -f1,3,7
egrep -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions
使用echo输出一绝对路径,使用egrep取其基名
#echo "/mnt/sda"|egrep -o "[^/]+/?$"|cut -d "/" -f1
fgrep: 不支持正则表达式搜索(所以很快)
name='value' " " :弱引用: 其中的变量引用会被替换为变量值.
name=$username ' ' :强引用: 其中变量引用不会被替换为变量值,保持原本字符串