Linux-文本过滤与处理
1.cat指令:连接指令并显示内容
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
1.1 语法
cat [-AbeEnstTuv] [--help] [--version] fileName
1.2 参数说明:
-n 或 --number:由 1 开始对所有输出的行数编号。 -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。 -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。 -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 -E 或 --show-ends : 在每行结束处显示 $。 -T 或 --show-tabs: 将 TAB 字符显示为 ^I。 -A, --show-all:等价于 -vET。 -e:等价于"-vE"选项; -t:等价于"-vT"选项;
1.3 实例
1.3.1 参数实例
1 jack go 2 3 4 1rtopajzlakmok[p 5 6 ekoskkdspkpds 7 wokkppppoasdo [root@VM-4-13-centos cat]# cat -b lesscat.txt 1 jack go 2 1rtopajzlakmok[p 3 ekoskkdspkpds 4 wokkppppoasdo [root@VM-4-13-centos cat]# cat -sn lesscat.txt 1 jack go 2 3 1rtopajzlakmok[p 4 5 ekoskkdspkpds 6 wokkppppoasdo
2.more指令:文件内容分屏查看器
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
2.1 语法
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
2.2 参数
-num 一次显示的行数 -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声 -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能 -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上) -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容 -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料 -s 当遇到有连续两行以上的空白行,就代换为一行的空白行 -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同) +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示 +num 从第 num 行开始显示 fileNames 欲显示内容的文档,可为复数个数
2.3 常用操作命令
Enter 向下n行,需要定义。默认为1行 Ctrl+F 向下滚动一屏 空格键 向下滚动一屏 Ctrl+B 返回上一屏 = 输出当前行的行号 :f 输出文件名和当前行的行号 V 调用vi编辑器 !命令 调用Shell,并执行命令 q 退出more
3.less
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
3.1 语法
less [参数] 文件
3.2 参数说明

-b <缓冲区大小> 设置缓冲区的大小 -e 当文件显示结束后,自动离开 -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 -g 只标志最后搜索的关键词 -i 忽略搜索时的大小写 -m 显示类似more命令的百分比 -N 显示每行的行号 -o <文件名> 将less 输出的内容在指定文件中保存起来 -Q 不使用警告音 -s 显示连续空行为一行 -S 行过长时间将超出部分舍弃 -x <数字> 将"tab"键显示为规定的数字空格 /字符串:向下搜索"字符串"的功能 ?字符串:向上搜索"字符串"的功能 n:重复前一个搜索(与 / 或 ? 有关) N:反向重复前一个搜索(与 / 或 ? 有关) b 向上翻一页 d 向后翻半页 h 显示帮助界面 Q 退出less 命令 u 向前滚动半页 y 向前滚动一行 空格键 滚动一页 回车键 滚动一行 [pagedown]: 向下翻动一页 [pageup]: 向上翻动一页
4.grep 在文件中搜索所用的行
grep 查找文件里符合条件的字符串,常与管道符|、cat、ps一起使用;主要用于查找文件中符合条件的字符串、统计文件中符合条件的字符串行数、grep 不显示自身进程
4.1 常用参数
-c:统计符合字符串条件的行数
-v:显示不包括文本的所有信息
4.2 实例
[root@VM-4-13-centos grep]# ifconfig | grep 127.0.0.1 inet 127.0.0.1 netmask 255.0.0.0
5.head 显示文件头部的内容
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
5.1 语法
head [参数] [文件]
5.2 参数
-q 隐藏文件名 -v 显示文件名 -c<数目> 显示的字节数。 -n<行数> 显示的行数。
5.3 实例
5.3.1 head /etc/passwd 默认显示前十行内容,等同于带参数 -n 10

[root@VM-4-13-centos ~]# head /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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@VM-4-13-centos ~]# head -n 10 /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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
5.3.2 head -n 3 /etc/passwd 显示前三行内容

[root@VM-4-13-centos ~]# head -n 3 /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
5.3.2 head -v /etc/passwd 显示文件名

[root@VM-4-13-centos ~]# head -v /etc/passwd ==> /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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
5.3.3 head -c 50 /etc/passwd 显示字节数
bin:x:1:1:bin:/bin[root@VM-4-13-centos ~]# head -c 47 /etc/passwd root:x:0:0:root:/root:/bin/bash
6.tail指令:输出文件尾部内容
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
6.1 语法格式
tail [参数] [文件]
6.2 语法格式
-f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示文件的尾部 n 行内容 --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束 -q, --quiet, --silent 从不输出给出文件名的首部 -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
6.3 实例
tail -f 文件名 -n 2000
7.wc指令:统计文件的字节数,单词数和行数
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
7.1 语法
wc [-clw][--help][--version][文件...]
7.2 参数
-c或--bytes或--chars 只显示Bytes数。 -l或--lines 显示行数。 -w或--words 只显示字数。 --help 在线帮助。 --version 显示版本信息。
7.3 实例
7.3.1 行数、单词数,以及该文件的字节数。
[root@VM-4-13-centos wc]# cat wc.txt -c或--bytes或--chars 只显示Bytes数。 -l或--lines 显示行数。 -w或--words 只显示字数。 --help 在线帮助。 --version 显示版本信息。 [root@VM-4-13-centos wc]# wc wc.txt 5 10 160 wc.txt
8.uniq指令:报告或忽略文件中的重复行
9.cut指令:删除文件中的指定字段
10.join指令:将两个文件的相同字段合并
Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来。
找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
10.1 语法
join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
10.2 参数
-a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。 -e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。 -i或--igore-case 比较栏位内容时,忽略大小写的差异。 -o<格式> 按照指定的格式来显示结果。 -t<字符> 使用栏位的分隔字符。 -v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。 -1<栏位> 连接[文件1]指定的栏位。 -2<栏位> 连接[文件2]指定的栏位。 --help 显示帮助。 --version 显示版本信息。
10.3 实例:测试文档
[root@VM-4-13-centos join]# cat leftjoin.txt Hello 95 Linux 85 test 30 my 88 [root@VM-4-13-centos join]# cat rightjoin.txt Hello 2005 Linux 2009 test 2006 you 66
10.3.1 join
[root@VM-4-13-centos join]# join leftjoin.txt rightjoin.txt Hello 95 2005 Linux 85 2009 test 30 2006 [root@VM-4-13-centos join]# join rightjoin.txt leftjoin.txt Hello 2005 95 Linux 2009 85 test 2006 30
10.3.2 显示指令文件中没有相同栏位的行
[root@VM-4-13-centos join]# join -a 1 leftjoin.txt rightjoin.txt Hello 95 2005 Linux 85 2009 test 30 2006 my 88 [root@VM-4-13-centos join]# join -a 2 leftjoin.txt rightjoin.txt Hello 95 2005 Linux 85 2009 test 30 2006 you 66
11.unexpand指令:将空白space转换为制表符
11.1 语法
unexpand [options] file
11.2 参数
-a | --all 转换所有空白。 --first-only 仅转换空白的前导序列(重写-a)。 -t | --tabs=N 将制表符N个字符分开,而不是8个字符(启用-a) -t | --tabs=LIST 使用逗号分隔的制表位列表最后一个指定的位置可以加上前缀“/”以指定要在最后一个显式指定的制表位结束后使用的制表位大小。也可以使用前缀“+”将剩余的制表位相对于最后指定的制表位而不是第一列对齐。 --help 显示帮助信息。 --version 显示版本信息。
11.3 实例

[root@VM-4-13-centos unexpand]# cat unexpand.txt 1 2 3 2 3 4 1 2 [root@VM-4-13-centos unexpand]# unexpand unexpand.txt 1 2 3 2 3 4 1 2 [root@VM-4-13-centos unexpand]# unexpand -a unexpand.txt 1 2 3 2 3 4 1 2 [root@VM-4-13-centos unexpand]# unexpand -t 5 unexpand.txt 1 2 3 2 3 4 1 2
12.tee指令:将输入内容复制到标准输出或文件
12.1 语法:
tee [-ai][--help][--version][文件...]
12.2 参数
-a, --append 追加到文件 -i, --ignore-interrupts 忽略中断信号 -p 诊断写入非管道的错误 --output-error[=MODE] 设置输出错误的方式,MODE 的选项在下边 --help 帮助文档 --version 版本信息 MODE: warn 写入遇到错误时诊断 warn-nopipe 写入非管道遇到错误时诊断 exit 写入遇到错误时退出 exit-nopipe 写入非管道遇到错误时退出 如果没有指定 --output-error,tee 会在写入管道发生错误时立即退出,写入非管道时诊断。
12.3 实例
[root@VM-4-13-centos tee]# cat 1.txt 123123123123123123123123123123123123123123123123123123123123123123123 [root@VM-4-13-centos tee]# tee 1.txt qwer qwer who are you ? who are you ? ^C [root@VM-4-13-centos tee]# cat 1.txt qwer who are you ? [root@VM-4-13-centos tee]# tee -a 1.txt 123 123 ^C [root@VM-4-13-centos tee]# cat 1.txt qwer who are you ? 123 [root@VM-4-13-centos tee]# tee 2.txt 3.txt 888 888 999 999 ^C [root@VM-4-13-centos tee]# cat 2.txt 888 999 [root@VM-4-13-centos tee]# cat 3.txt 888 999
13.tac指令:以行为单位反序连接和打印文件
13.1 语法
tac [OPTION] [FILE]
13.2 参数
-b, --before 在行前而非行尾添加分隔标志 -r, --regex 将分隔标志视作正则表达式来解析 -s, --separator=字符串 使用指定字符串代替换行作为分隔标志 --help 显示此帮助信息并退出 --version 显示版本信息并退出
13.3 实例
[root@VM-4-13-centos tac]# cat tac.txt This is 1 line This is 2 line This is 3 line [root@VM-4-13-centos tac]# cat tac.txt | tac This is 3 line This is 2 line This is 1 line
14.paste指令:合并文件
paste 指令会把每个文件以列对列的方式,一列列地加以合并。
14.语法
paste [-s][-d <间隔字符>][--help][--version][文件...]
14.2 参数
-d<间隔字符>或--delimiters=<间隔字符> 用指定的间隔字符取代跳格字符。 -s或--serial 串列进行而非平行处理。 --help 在线帮助。 --version 显示帮助信息。 [文件…] 指定操作的文件路径
14.3 实例

[root@VM-4-13-centos paste]# cat 1.txt 111 112 113 111 111 121 111 123 111 [root@VM-4-13-centos paste]# cat 2.txt 222 221 222 222 222 223 222 221 123 222 221 123 [root@VM-4-13-centos paste]# cat 3.txt 333 333 [root@VM-4-13-centos paste]# paste 1.txt 2.txt 3.txt 111 112 113 222 221 222 333 111 111 121 222 222 223 333 111 123 111 222 221 123 222 221 123 [root@VM-4-13-centos paste]# paste -s 1.txt 2.txt 3.txt 111 112 113 111 111 121 111 123 111 222 221 222 222 222 223 222 221 123 222 221 123 333 333 [root@VM-4-13-centos paste]# paste -d "#" 1.txt 2.txt 3.txt 111 112 113#222 221 222#333 111 111 121#222 222 223#333 111 123 111#222 221 123# #222 221 123# [root@VM-4-13-centos paste]# paste -d "|" 1.txt 2.txt 3.txt 111 112 113|222 221 222|333 111 111 121|222 222 223|333 111 123 111|222 221 123| |222 221 123|
15.cmp指令:比较两个文件
当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据。
15.1 语法
cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]
15.2 参数
-c或--print-chars 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。 -i<字符数目>或--ignore-initial=<字符数目> 指定一个数目。 -l或--verbose 标示出所有不一样的地方。 -s或--quiet或--silent 不显示错误信息。 -v或--version 显示版本信息。 --help 在线帮助。
15.3 实例
[root@VM-4-13-centos Linux-commands]# cat 1.txt abcdf 12345 [root@VM-4-13-centos Linux-commands]# cat 2.txt abcdf 123456 [root@VM-4-13-centos Linux-commands]# cmp -l 1.txt 2.txt 12 12 66 cmp:1.txt 已结束 [root@VM-4-13-centos Linux-commands]# cmp -c 1.txt 2.txt 1.txt 2.txt 不同:第 2 行,第 12 字节为 12 ^J 66 6
16.look指令:显示文件中以指定字符串开头的行
16.1 语法
look [-adf][-t<字尾字符串>][字首字符串][字典文件]
16.2 参数
-a 使用另一个字典文件web2,该文件也位于/usr/dict目录下。 -d 只对比英文字母和数字,其余一慨忽略不予比对。 -f 忽略字符大小写差别。 -t<字尾字符串> 设置字尾字符串。
16.3 实例
[root@VM-4-13-centos look]# cat look.txt believe there is a person who brings sunshine into your life. That person may have enough to spread around. cut if you really have to wait for someone to bring you the sun and give you a good feeling, then you may have to wait a long time. [root@VM-4-13-centos look]# look b look.txt believe there is a person who brings sunshine into your life. [root@VM-4-13-centos look]# look -f t look.txt That person may have enough to spread around.