Grep:
Linux文本处理三剑客
grep: 文本过滤(模式:pattern)工具
Sed: 文本编辑工具
awk:Linux上的实现gawk,文本报告生成器:
正则表达式引擎
选项:
-v: 显示不能够被pattern匹配到的行;
-q: 静默模式,不输出任何信息
基本正则表达式元字符
字符匹配:
.: 匹配任意单个字符:
[:digit:]、[:lower:]、[:upper:]、[:alnum:]、[:punct:]、[:space:]、[:alpha:]
匹配次数,用在要指定次数的字符后面,用于指定前面的字符要出现的次数:
*:匹配前面字符任意次
例如:grep "x*y"
abxy
Xay
.*: 任意长度的任意字符
\?: 匹配前面的字符0次或1次
+: 匹配其前面的字符至少1次
{m}: 匹配前面的字符m次
{m,n}:匹配前面的字符至少m次,至多n次
{0,n}; 匹配前面的字符至多n次:
{m,}: 匹配前面的字符至少m次
位置锚定
^: 行首锚定,用于模式的最左侧:
$: 行尾锚定:用于模式的最右侧
^PATTERN$: 用于模式匹配正行
^$: 空行:
^[[:space:]]*$
\<或\b: 词首锚定;用于单词模式的左侧;
\>或\b: 词首锚定;用于单词模式的右侧;
\<PATTERN\>: 匹配整个单词;
分组:
(): 将一个或多个字符捆绑在一起,当作一个整体进行处理:
(xy)*ab
示例:# grep "(xy)+" grep.txt
Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
(ab+(xy)*);
\1
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
grep ‘^[Ss]‘ /proc/meminfo
-
sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1
-
grep "\b[0-9]{2,3}\b" /etc/passwd # grep "\b[[:digit:]]{2,3}\b" /etc/passwd
-
grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
-
netstat -tan | grep "LISTEN[[:space:]]*$"
-
grep "^([[:alnum:]]+\>).*\1$" /etc/passwd
grep "(^[[:alnum:]]+\>).*\1$" /etc/passwd
grep "^([[:alnum:]]+\>).*\1$" /etc/passwd
egrep = grep -E
扩展正则表达式的元字符
字符匹配:跟正则表达一样
次数匹配:
?: 0或1次
+:1次或多次
{m}: 匹配m次
{m,n}:至少m; 至多n次
锚定:
^
$
\<,\b
\>,\b
分组:
()
后向引用:\1,\2,…
或者:
a|b
grep -E ‘^(root|centos|user1)\>‘ /etc/passwd
grep -E ‘^(root|centos|user1)\>‘ /etc/passwd | cut -d: -f1,3,7
grep -E -o "^[_[:alpha:]]+()" /etc/rc.d/init.d/functions
echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1
进一步:使用egrep取出路径的目录名,类似于dirname命令结果,
fgrep: 不支持正则表达式搜索:
原文地址:http://blog.51cto.com/yq1986/2337227