文本处理工具:
Linux上文本处理三剑客:
grep,egrep,fgrep:文本过滤工具(模式:pattern) 工具;
grep:基本正则表达式,-E,-F
egrep:扩展正则表达式,-G,-F
fgrep:不支持正则表达式,
sed:stream editor,流编辑器,文本编辑工具;
awk:Linux上的实现为gawk,文本报告生成器(格式化文本);
正则表达式:Regual Expression,REGEXP
由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符:\(hello[[:space:]]\+\)\+
grep:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)” 对目标文件逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;
正则表达式引擎;
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:
--color=auto:对匹配到的文本着色后高亮显示;
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v,--Invert-match:显示不能被模式匹配的行;
-E:支持使用扩展的正则表达式元字符;
-q,--qulet,--silent:静默模式,即不输出任何信息;
-A#: after,后#行
-B#:before,前#行
-C#:context,前后各#行
基本正则表达式元字符:
字符匹配:
. :匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:]、[:lower:]、[:upper:]、[:alnum:]、[:punct:]、[:space:]
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
*:匹配其前面的字符任意次;0,1,多次
例如:grep"x\+y"
abxy
aby
xxxxxy
yab
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
\+:匹配其前面的字符1次或多次;即其前面的字符要出现至少1次;
\{m\}:匹配其前面的字符m次
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空白或包含空白字符的行;
单词:非特殊字符组成的连续字符(字符串)都称为单词;
\<或\b:词首锚定,用于单词模式的最左侧;
\>或\b:词尾锚定,用于单词模式的最右侧;
\<PATTERN\>:匹配完整单词;
egrep:
支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E
egrep [OPTIONS] PATTERN [FILE...]
选项:
-i,-o,-v,-q,-A,-B,-C
-G:支持基本正则表达式
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
次数匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可无的;
+:其前字符至少一次;
{m}:其前的字符m次;
{m,n}:至少m次,至多n次;
{0,m}
{m,}
位置锚定:
^:行首锚定;
$:行尾锚定;
\<,\b:词首锚定;
\>,\b:词尾锚定;
分组及引用:
():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部的变量中;
后向引用:\1,\2,....
或:
a | b:a或者b;
C | cat:C或cat
(c|C)at:cat或Cat
fgrep:不支持正则表达式元字符;
当无需要用到元字符去编写模式时,使用fgrep能更好;
文本查看及处理工具:wc,cut,sort,uniq,diff,patch
wc:word count
wc [OPTION]...[FILE]...
-l: lines
-w: words
-c: bytes
cut:
cut OPTION... [FILE]...
OPTION:
-d CHAR:以指定的字符做分隔符;
-f FILEDS:挑选出的字段;
#:指定的单个字段;
#-#:连续的多个字段;
#,#:离散的多个字段;
sort:
sort [OPTION]... [FILE]...
-n:基于数值大小而非字符进行排序;
-t CHAR:指定分隔符;
-k #:用于排序比较的字段;
-r:逆序排序;
-f:忽略字符大小写
-u:重复的行只保留一份;
重复行:连续且相同;
uniq:报告或移除重复的行
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:向文件打补丁
patch [OPTION] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE
patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE