一、文本处理工具的分类:
查看全部内容:more、less、cat、tac、rev
截取文件内容:head 、tail
抽取文件内容:cut
抽取关键字:grep、egrep
合并两个文件的内容:paste
下面我们分别来对个命令进行讲解:
more:
特点:按屏显示、只能向下翻页
翻页键:enter:向文件尾部翻一行;space:向文件尾部翻一屏幕
选项:
-#:可指定一屏显示多少行
+#:从文件的第#行开始显示
+/string:从匹配到string的行开始显示
less:
特点:按屏显示、可以向上、向下翻页
翻页键:enter:向文件尾部翻一行;space:向文件尾部翻一屏幕
k:向文件首部翻一行;b:向文件首部翻一屏幕
选项:/string,可以查看匹配到的字符串,N|n匹配上一个或下一个
cat:
特点:全部显示
选项:
-n:显示每一行的行号
-b:只显示非空行的行号
-A:显示左右内容包括控制符
-E:显示行结束符
-s:压缩连续的空行为一行
tac:
特点:相当于cat的取反,从下往上显示
rev:cat输出的结果,旋转180度输出。
根据下面输出结果可以看出cat、tac、rev的区别
[root@localhost testdir]# cat a 1 2 3 4 5 6 7 8 9 10 abc [root@localhost testdir]# tac a abc 1 2 3 4 5 6 7 8 9 10 [root@localhost testdir]# rev a 01 9 8 7 6 5 4 3 2 1 cba
head:
-#:显示文件的前#行
-c:显示前N个字节
tail:
-#:显示文件的后#行
-c:显示后N个字节
-f:可以监听文件或日志是否有更新
tail -n 0 -f /var/log/messages &
cut:
特点:可根据分隔符来分割匹配到的行
选项:
-d:指定分隔符
-f:指定要分割的列
-c:按字符切割 -c1-5 指定切割每行的前5个字符
–output-delimiter=sting :指定输出分隔符
paste:
特点:合并两个文件的同一行 到一行中显示
选项:
-d:指定两个文件的分隔符,默认时tab
-s:两个文件,file1文件所有内容放到一行显示,file2同file
root@cenots6.8 ~ # paste /etc/issue /etc/passwd CentOS release 6.8 (Final) root:x:0:0:root:/root:/bin/bash Kernel \r on an \m bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
root@cenots6.8 ~ # paste -s /etc/issue /etc/passwd CentOS release 6.8 (Final) Kernel \r on an \m root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:dae
grep:
特点:查找匹配到的关键字,支持正则表达式和扩展正则表达式
选项:
-o:只显示匹配到的内容
-v:除了匹配到的内容,其他的内容都显示
-E:扩展正则表达式
–color:匹配到的内容显示红色
-i:忽略大小写匹配
-q:静默模式,通常用户shell脚本中,来判断是否正常输出,echo $?查看
-A#:显示匹配到内容及后#行
-B#:显示匹配到内容及前#行
-C#:显示匹配到的内容及前后#行
-e:实现多个匹配选项的或关系
二、分析文本的工具
排序:sort
去重:uniq
统计数量:wc
比较文件:diff、patch
sort:
特点:文本排序后在屏幕上显示出来
选项:
-n:按照数字大小排序
-t:指定分隔符
-k:指定排序的行默认正序
-r:逆序排序输出的行
-u:删除输出重复的行(不相邻重复的也算重复和uniq的区别)
-f:忽略字母大小写
uniq:
特点:可以查看重复的次数,可以显示重复的和不重复的内容
选项:
-c:在行首显示该行重复的次数
-d:只显示重复的行
-c:只显示不重复的行
wc:
特点:可统计单词数,字符数,行数
选项:
-l:显示行数 –line
-c:显示字节数 –char
-w:单词数 –world
diff:
特点:可以比较两个文本的不同,针对不同内容可以显示出来或输出到指定文件中当做补丁使用
选项: -u,为输出内容定义统一的diff格式,用于打补丁
root@cenots6.8 /testdir # paste a b I am a I am b haha hello waht? waht? a b root@cenots6.8 /testdir # diff a b 1,2c1,2 # 1,2c1,2 表示a文件的第1行和第二行和b文件的第一行和第二行有不同 < I am a # “<”表示a文件的内容 < haha --- > I am b # “>”表示a文件的内容 > hello 4c4 < a --- > b
patch:
特点:配合diff命令用户生成补丁文件
选项:-b,补丁文件的时候保留源文件
-i,源文件 补丁文件
不加-i,补丁文件,源文件
root@cenots6.8 /testdir # diff -u a b >c.patch root@cenots6.8 /testdir # cat c.patch --- a 2016-08-08 10:12:06.173647189 +0800 +++ b 2016-08-08 10:12:12.640741349 +0800 @@ -1,4 +1,4 @@ -I am a -haha +I am b +hello waht? -a +b
root@cenots6.8 /testdir # patch -b a c.patch # 将a文件补丁成b文件,并保存源文件 patching file a root@cenots6.8 /testdir # cat a I am b hello waht? b root@cenots6.8 /testdir # patch -i c.patch a # 读取补丁从c.patch 输入 和上述方法一致 patching file a # 只是参数位置不同 root@cenots6.8 /testdir # cat a I am b hello waht? b
root@cenots6.8 /testdir # patch -b a < c.patch # 将a文件恢复原样 patching file a Reversed (or previously applied) patch detected! Assume -R? [n] y root@cenots6.8 /testdir # cat a I am a haha waht? a
三、正则表达式和扩展正则表达式
正则表达式功能非常强大,我们可以通过组合一些特殊字符或文本来匹配到我们需要的内容,有些程序功能之所以强大也因为其支持正则表达式,例如:grep、sed、vim等
根据元字符分类:
字符匹配:
[0-9]:匹配0-9之间任意一个数字
[a-z]:匹配aAbB……yYz之间任意一个字母
[A-Z]:匹配aAbB……yYz之间任意一个字母
[[:alpha:]]:匹配任意一个字母
[[:digit:]]:匹配任意一个数字
[[:alnum:]]:匹配任意一个数字或字母
[[:upper:]]:任意一个大写字母
[[:lower:]]:任意一个小写字母
[[:punct:]]:匹配任意一个符号
[[:space:]]:匹配任意一个空格或tab
\(ab\).*\1:匹配左面第一个()里面的内容
.:任意单个字符
次数匹配:
\{x,y\}:匹配至少x次,最多y次
\{x,\}:匹配至少x次
\{,y\}:匹配最多y次
\{x\}:匹配x次
\?:匹配0次或1次
\+:匹配至少1次
*:*前面的字符匹配任意次
位置锚定:
^:锚定行首
$:锚定行尾
\<或\b:锚定词首
\>或\b:锚定词尾
分组:
\(ab\)
其他:
[^]:非
\:某些具有特殊意义的字符在需要匹配的时候需要转移
扩展正则表达式:
扩展正则表达式,除了元字符的区别外,还多了一个 “|” 命令
根据元字符分类:
字符匹配:
[0-9]:匹配0-9之间任意一个数字
[a-z]:匹配aAbB……yYz之间任意一个字母
[A-Z]:匹配aAbB……yYz之间任意一个字母
[[:alpha:]]:匹配任意一个字母
[[:digit:]]:匹配任意一个数字
[[:alnum:]]:匹配任意一个数字或字母
[[:upper:]]:任意一个大写字母
[[:lower:]]:任意一个小写字母
[[:punct:]]:匹配任意一个符号
[[:space:]]:匹配任意一个空格或tab
(ab).*\1:匹配左面第一个()里面的内容
.:任意单个字符
次数匹配:
{x,y}:匹配至少x次,最多y次
{x,}:匹配至少x次
{,y}:匹配最多y次
{x}:匹配x次
?:匹配0次或1次
+:匹配至少1次
*:*前面的字符匹配任意次
位置锚定:
^:锚定行首
$:锚定行尾
\<或\b:锚定词首
\>或\b:锚定词尾
分组:
(ab)
其他:
[^]:非
\:某些具有特殊意义的字符在需要匹配的时候需要转移
|:
c | Cat :结果时c或Cat
(c|C)at:结果是cat 或Cat
原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/30868