Linux系统上的文件处理工具
我们都知道在计算机中,存在大量的文件,这些文件中包含大量的信息。可是有些时候,为了工作的效率,我们在茫茫信息中提取出我们所需要的信息,这样的技能就显得尤为重要。Linux系统上为我我们提供了多种多样的文本处理工具,下面我们来简单说一下。
查看文件内容我们可以使用less命令,cat命令,more命令等等
cat
cat [OPTION]… [FILE]…
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
cat命令是把整个目标文件的内容整个打印出来,如果我们遇到文件非常庞大的情况,我们可以使用less和more来进行查看
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/keyword 关键字查询
n/N跳到下一个or 上一个匹配
less命令其实就是man命令使用的分页器
more:分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
如果我们想要显示文本前或后n行内容
head
head [OPTION]… [FILE]…
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#:指定行数
tail
tail
tail [OPTION]… [FILE]…
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪显示文件新追加的内容,常用日志监控
如果我们想要在使用-f选项的同时,进行其他工作,可以在最后加上&符号,将其调到后台运行。
按列抽取文本
cut
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING指定输出分隔符
显示文件或STDIN数据的指定列
cut -d:-f1 /etc/passwd
cat /etc/passwd | cut-d:-f7
cut -c2-5 /usr/share/dict/words
paste 合并两个文件同行号的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
有时候我们需要对文本进行分析
wc:收集文本统计数据
计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
例如:$wcstory.txt
39 237 1901 story.txt
行数 字数 字符数
使用 -l 来只计数行数
使用 -w 来只计数单词总数
使用 -c 来只计数字节总数
使用 -m 来只计数字符总数
sort:文本排序
把整理过的文本显示在STDOUT,不改变原始文件
$sort [options] file(s)
-r 执行反方向(由上至下)整理
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次
uniq:从输入中删除重复的前后相接的行
uniq[OPTION]… [FILE]…
-c: 显示每行重复出现的次数;
-d: 仅显示重复过的行;
-u: 仅显示不曾重复的行;
连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq-c
linux上文本处理三剑客:
grep,egrep,fgrep:文本过滤工具(模式:pattern)工具;
grep:基本正则表达式,-E,-F
egrep:扩展正则表达式,-G,-F
fgrep:不支持正则表达式
sed:stream editor,流编辑器;文本编辑器工具;
awk:linux上的实现为gawk,文本报告生成器(格式化文本);
grep:Global search REgularexpression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文件进行逐行匹配检查;打印匹配到的行。
模式:由正则表达式字符及文本字符所编写的过滤条件
正则表达式REFEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能。
正则表达式分为两类:
基本正则表达式:BRE
扩展正则表达式: ERE
grep:
grep [OPTIONS] PATTERN [FILE…]
OPTIONS:
–color=auto:对匹配到的文本着色后高亮显示;
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, –invert-match:显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符;
-q, –quiet, –silent:静默模式,既不输出任何信息;
-A#:after,后#行
-B#:before,前#行
-C#:context,前后各#行
说到这里我们就非常有必要说一下正则表达式
正则表达式:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。
基本正则表达式元字符:
字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式
*:匹配其前面的字符任意次:0.1.多次;
.*:匹配任意长度的任意字符
/?:匹配其前面的字符0次或1次;既其前面的字符是可有可无的;
\+:匹配其前面的字符1次或多次;既其前面的字符要出现至少1次;
\{m\}:匹配其前面的字符m次;
\{0,n}:至多n次
\{m,}:至少m次
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行
^[[:space:]]*$:空行或包含空白字符的行;
单词:非特殊字符组成的连续字符(字符串)都称为单词;
\<或\b:词首锚定,用于单词模式的左侧;
\>或\b:词尾锚定,用于单词模式的右侧;
\<PATTERN>:匹配完整单词;
分组及引用
\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理;
Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3:
…
实例:\(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
扩展正则表达式:
egrep= grep -E
egrep [OPTIONS] PATTERN [FILE…]
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定:
^ :行首
$ :行尾
\<, \b :语首
\>, \b :语尾
分组:
()
后向引用:\1, \2, …
例:
a|b
C|cat: C或cat
(C|c)at:Cat或cat
原创文章,作者:song_linux,如若转载,请注明出处:http://www.178linux.com/29466