初学linux的文件处理工具中,分为了两类处理工具:
一.取行,又称之为投影
1.wc(word count) [options] PATH 可以看作是一个行统计工具
-l:只显示行数;
-w:只显示单词数;
-c:只显示字节数;
2.tr(translate):必须使用输入重定向.
-d"字符集合",把出现在文件属于字符集合的字符统统删除。
3.cut:文件切割,最常用的功能是能够使用指定的符号作为行的分隔符,将每一行切片,而只取出某些片.
cut [options] PATH
-d:分隔符,默认的分隔符是空格.
-f:取第几个分隔符.
二.取列,也称之为选择;
grep:Global search Regular Expression and Printing.
既然要学习如何使用正则表达式来进行条件选择,那么首先要从元字符开始。
元字符:不表示字符本身的意义,而用于额外功能性描述的字符.
对于基本的正则表达式和扩展的正则表达式还是有少许的不同点:
1.基本的正则表达式;贪婪模式(尽可能长的去匹配符合模式的内容)
grep [options] "PATTERN" PATH 所谓的PATTERN就是我们用正则表达式来做的条件。
[options]:
-v:条件取反;
e.g#grep -v "^$" /etc/rc.d/rc.sysinit
显示这个文件里面的非空行.
-o:只显示匹配的字符,而不是整行;
-A:显示匹配到的行时,顺带显示其后面的#个行;
-B:显示匹配到的行时,顺带显示其前面的#个行;
-C:前后的#行;
-i:不区分大小写;
-r:递归查找;
-E:使用扩展的正则表达式
元字符:(里面引用一些管道的概念,也就是头一次的输出即为第二个的输入)
^STRING:锚定行首符合条件的内容;
从这里可以得知所谓的管道在这里就是将grep执行后的结果传給wc.
STRING$:锚定行尾符合条件的内容;
^$:锚定空白字符自成一行的内容
\<:锚定词首;
\>:锚定词尾;
\<Pattern\>:锚定单词
\(Pattern\):(分组)当作一个整体去匹配
e.g#grep "\(ab\)\{1,3\}" PATH
以ab作为整体出现1~3次.
要求后面的l..e要等于前面的l..e
记为:grep "\(l..e\).*\1"
.:匹配任意单个字符;
*:匹配其前面的字符任意次;
.*:匹配任意长度的任意字符;
[]:匹配指定范围内的任意字符;
? :匹配在其前面的字符0~1次;
\{m,n\}匹配其前面的字符最少m次,最大n次;
such: \{3,\}匹配其前面最少三次,
\{m\}:精确匹配m次.
grep "[Bb]\{2,5\}[Tt]" :匹配前面是B或者t开头的2~5次,并且后跟t;
[^]:匹配指定范围外的任意字符;
字符集合:
[a-z],[0-9],[A-Z]
[a-zA-Z0-9]
[:digit:]:0-9
[:upper:]:A-Z
[:lower:]:a-z
[:punct:]:符号
[:space:]:空格
[:alpha:]:大小写字符
[:alnum:]:大小写数字
2.扩展的正则表达式;Egrep = grep -e
+:匹配其前面字符至少一次;
.:任意单个字符;
[]:匹配指定范围内的单个字符;
[^]:匹配指定范围外的单个字符;
?:匹配任意字符0~1次;
^ :锚定行首;
$ :锚定行尾;
\<:匹配词首;
\>:匹配词尾;
():匹配整体; 区别于基本的正则表达式
\{m,n\}:最少m次,最多n次;
a|b:a或者b,二选一;
such:
在/proc/meminfo文件里面找到以s或者S为行首的地方.
我们需要把s|S看作是一个整体,所以要用上括号,
否则就是认为是(^s)|S的意义了。
在 grep.txt这个文件里面找到以a开头,但是a至少出现1一次以上,后面跟上b的串。