文本处理工具

1、cat命令

功能:

显示文本内容,连接合并文本内容并在标准设备上输出

语法:

cat [OPTION]... [FILE]...

选项:

-E:显示行结束符(回车)$
-A:显示所有控制符,相当于-vET
-n:对显示出的每一行进行编号
-b:对非空白行编号
-s:将连续的空行压缩成一行
-T:把TAB字符显示为^I
-v:除了 LFD 和 TAB 之外所有控制符用 ^ 和 M- 记方式显示

示例:

查看/etc/issue文件内容
[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m
将/etc/issue文件和/etc/hostname文件合并为issname
[root@localhost ~]# cat /etc/hostname /etc/issue > issname
[root@localhost ~]# cat issname
localhost.localdomain
\S
Kernel \r on an \m

2、tac命令

功能:

逆向连接或打印文本内容到标准输出设备上

语法:

tac [OPTION]... [FILE]...

选项:

-a:将内容追加到文件的末尾
-i:忽略中断信号

示例:

用tac命令显示/etc/issue文件内容
[root@localhost ~]# tac /etc/issue

Kernel \r on an \m
\S

3、rev命令

功能:

将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出

语法:

rev [options] [file ...]

示例:

用rev命令显示/etc/issue文件内容
[root@localhost ~]# rev issname 
niamodlacol.tsohlacol
S\
m\ na no r\ lenreK

4、more命令

功能:

用于分页显示 (一次一屏) 文本(无法往首部翻屏)

语法:

more [options] file [...]

选项:

-m:指定每屏显示的行数(整数)
-d:显示翻页和退出提示
-s:多个空行压缩成一行显示
-u:禁止下划线
+num:指定每屏显示的行数

说明:

space键:显示文本的下一屏
回车键:显示文本的下一行
/ :输入一个模式,可以在文本中找下一个相匹配的模式(正则表达式)
H键:显示帮助
B键:显示上一屏
Q键:退出

示例:

使用more命令显示/etc/passwd文件内容
[root@localhost ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

5、less命令

功能:

显示文档内容,可以上下翻页(用PageUp键向上翻页,用PageDown键向下翻页)

语法:

more [options] file

选项:

-N:显示行号
-l:搜索时忽略大小写
-s:将连续的空行压缩成一行显示

说明:

/字符串:向下搜索“字符串”
?字符串:向上所属“字符串”
n:向下搜索(重复前一个搜索)
N:向上搜索(逆向重复前一个搜索)
b键:向后翻一页
d键:向后翻半页
h键:显示帮助
q键:退出
u键:向前滚动半页
回车键:向下滚动一行
空格键:向下滚动一页

示例:

[root@localhost ~]# less -N /etc/passwd
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin

6、head命令

功能:

显示文件的开头部分(默认显示10行)

语法:

head [OPTION]... [FILE]...

选项:

-c #:指定显示头部内容的#个字符
-n #:指定显示头部内容的#行

示例:

显示/etc/passwd文件的前5行
[root@localhost ~]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

7、tail命令

功能:

显示文件尾部部分(默认显示后10行)

语法:

tail [OPTION]... [FILE]...

选项:

-c #:指定显示尾部内容的#个字符
-n #:指定显示尾部内容的#行

示例:

显示/etc/passwd文件的最后5个字符
[root@localhost ~]# tail -c 5 /etc/passwd
bash (看到的只有4个字符,其实最后面还隐藏了一个结束符$,用cat -A查看)

8、cut命令

功能:

显示文件的指定部分,按列抽取

语法:

cut OPTION... [FILE]...

选项;

-b:仅显示行中指定直接范围的内容
-c:仅显示行中指定范围的字符
-d:指定字段的分隔符,默认tab
-f:指定字段并显示内容(#、#,#、#-#)
-n:与“-b”选项连用,不分割多个字节字符
--out-delimiter=string:指定string为字段分隔符

示例:

[root@localhost ~]# cut -d : -f 4 /etc/passwd

9、paste命令

功能:

合并两个文件同行号的列到一行

语法: paste [OPTION]… [FILE]…

选项:

-d:指定分隔符,默认tab
-s:将一个文件的所有行合成一行显示

示例:

[root@localhost ~]# paste -s /etc/issue
\S  Kernel \r on an \m

10、wc命令

功能:

统计打印文件的行数、单词数、字符数

语法:

wc [OPTION]... [FILE]...

选项:

-l:统计行数
-w:统计单词数(连续不断的字符组合)
-c:统计字节数
-m:统计字符数

示例:

[root@localhost ~]# wc /etc/hostname 
 1           1           22     /etc/hostname
(行数) (单词数)    (字符数)

11、sort命令

功能:

文本排序

语法:

sort [OPTION]... [FILE]...

选项:

-r:逆向排序
-n:由大到小排序
-f:忽略字符大小写
-u:删除输出中的重复行
-b:忽略行首的空格字符
-t:指定字段分隔符
-k #:按照指定的分隔符来指定#列的内容来整理

示例:

[root@localhost ~]# sort num
1
2
2
3
[root@localhost ~]# sort -r num
3
2
2
1

12、uniq命令

功能:

忽略重复的行,常与sort命令连用

语法:

uniq [OPTION]... [INPUT [OUTPUT]]

选项:

-c:显示每行重复出现的次数(连续且完全相同方为重复)
-d:仅显示重复的行
-u:仅显示不重复的行

示例:

[root@localhost ~]# sort num | uniq -c
1
2
3

13、diff命令

功能:

比较文件间的区别

语法:

diff [OPTION]... FILES

选项:

-b:忽略一行当中多个空白的区别(about me与about    me 视为相同)
-B:忽略空白行
-i:忽略大小写
-u:以统一的格式输出,适用于补丁文件

示例:

[root@localhost ~]# cat num
1
2
3
[root@localhost ~]# cat num1
1
2
2
3
[root@localhost ~]# diff num num1
2a3
> 2

14、patch命令

功能:

apply changes to files,打补丁

选项:

-b :自动备份改变了的文件
-p #:后面的#表示取消几层目录
-E:将新的文件还原成原来旧的版本

15、grep命令

功能:

文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。(模式:由正则表达式字符及文本字符所编写的过滤条件)

语法:

grep [OPTIONS] PATTERN [FILE...]

选项:

--color=atuo:对匹配到的文本着色显示
-v:显示不能够被模式匹配的行
-i:忽略字符的大小写
-n:显示匹配到的内容的行号
-c:统计匹配到的行数
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-e:实现多个选项键的逻辑or关系(grep -e hi -e hello file)
-w:单词(字符组合)匹配
-A #:显示匹配到的模式的后#行
-B #:显示匹配到的模式的前#行
-C #:显示匹配到的模式的前后各#行
-E:使用扩展正则表达式

示例:

[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

16、正则表达式

(1)正则表达式是一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。分为基本正则表示式和扩展正则表达式。元字符分类:字符匹配、次数匹配、位置锚定、分组。

(2)基本真正表达式元字符

1)字符匹配
.:表示匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:alpha:]:所有大小写字母
[:alnum:]:所有字母和数字
[:upper:]:所有大写字母
[:lower:]:所有小写字母
[:digit:]:所有数字
[:punct:]:所有表达符号
[:space:]:所有空白字符(包括空格和tab键)

2)次数匹配
*:匹配前面的字符任意次,包括0次,(贪婪模式)
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{n\}:匹配其前面字符n次
\{m,n\}:匹配其前面字符最少m次,最多n次
\{,n\}:匹配其前面字符最少0次,最多n次
\{m,\}:匹配其前面字符最少m次

3)位置锚定
^:行首锚定,用于模式的最左侧
$:行位锚定,用于模式的最右侧
^PATTERN$:用于模式匹配整行
^$:空行
^[[:space:]]*$:空白行(包括空行和tab)
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<WORD\>:匹配整个单词

4)分组
\(\):将一个或多字符捆绑在一起,当作一个整体进行处理。
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令方式为:\1、\2 ... 
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

    实例: \(string1\+\(string2\)*\)
    \1: string1\+\(string2\)*
    \2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

(3)egrep及扩展的正则表达式元字符(与基本正则表达式基本相同)

1)字符匹配
.:表示匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:alpha:]:所有大小写字母
[:alnum:]:所有字母和数字
[:upper:]:所有大写字母
[:lower:]:所有小写字母
[:digit:]:所有数字
[:punct:]:所有表达符号
[:space:]:所有空白字符(包括空格和tab键)

2)次数匹配
*:匹配前面的字符任意次,包括0次,(贪婪模式)
.*:任意长度的任意字符
?:匹配其前面的字符0或1次
+:匹配其前面的字符至少1次
{n}:匹配其前面字符n次
{m,n}:匹配其前面字符最少m次,最多n次
{,n}:匹配其前面字符最少0次,最多n次
{m,}:匹配其前面字符最少m次

3)位置锚定
^:行首锚定,用于模式的最左侧
$:行位锚定,用于模式的最右侧
^PATTERN$:用于模式匹配整行
^$:空行
^[[:space:]]*$:空白行(包括空行和tab)
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<WORD\>:匹配整个单词

4)分组
():将一个或多字符捆绑在一起,当作一个整体进行处理。分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令方式为:\1、\2 ... 
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

5)或者
a | b:表示a或b(整个左侧或右侧)
C|cat:表示C或cat
(C|c)at:表示Cat或cat

(4)fgrep不支持正则表达式元字符,当无需用到元字符去编写模式时,使用fgrep性能更好

(5)示例

1 、显示/etc/passwd 文件中不以/bin/bash 结尾的行
    [root@localhost ~]# grep -v /bin/bash$ /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin

2 、找出/etc/passwd 中的两位或三位数
    [root@localhost ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin

3使用egrep 取出/etc/rc.d/init.d/functions 中其基名
[root@localhost ~]# echo /etc/rc.d/init.d/functions | grep -E "[^/]+/?$"

原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/30798