标签:文本处理工具
今天来介绍一下文本处理工具,linux系统中存放着很多的文本文件,当我们需要查看某些文件时就需要借助一些工具来查看,linux系统当中文本的查看工具蛮多,例如cat、less、head,tail等工具,接下来句提来介绍工具的用法
文件查看命令
cat:文件查看命令
语法格式:cat[OPTION]... [FILE]...
选项:
-A:查看所有的控制符,平常查看文件是看不到那些特殊字符像tab键敲出来的空格,可以使用此选项来查看。
-n:对显示文件的内容来编号,这个选项有时候还是很重要的,比如我想截取第多少行的文件内容,再做进一步的处理工作
-E:显示每行的行尾结束符$
-b:显示非空行的编号
-s:压缩连续的空行成一行,将文件当中的空行弄到一行
tac和cat是一样的功能
cat命令的功能
1、 查看这个文件的内容
2、 从键盘创建一个文件
3、 将多个文件合并成为一个文件
cat /etc/profile
cat >/root/abc
12345
abcd
结束使用ctrl+d键来结束,讲内容写入到文件里去
cat/etc/fstab /etc/issue > /root/all
rev:将文件内容倒着显示,和cat显示文件的顺序相反
more:分页查看文件,将文件内容分成一屏一屏的查看,这样做的好处就是当我查看某个大文件时,里面的内容就会一页一页的显示,而不是像cat命令一样一下就显示完了,前面的内容就一闪过过了
语法格式:more [-dlfpcsu][-num] [+/pattern] [+linenum] [file ...]
-d:显示翻页及退出提示,给用户予以交互,提示用户按q键退出
more常用操作命令
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
less:一页一页的查看文件或STDIN输出
语法格式:Less[option..] filename
-e::当文件显示结束后,自动离开
-m:显示类似more命令的百分比
-N: 显示每行的行号
-s 显示连续空行为一行
查看文件的操作命令
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
Head:显示文件的头几行,默认是显示前10行
语法格式:head [OPTION]... [FILE]...
-c n:指定获取前n个字节
-n n:指定获取前n行
-n:指定行数
tail:显示文件后几行,默认最后10行
语法格式:tail[OPTION]... [FILE]...
-c n :指定获取后n个字节
-n n:指定获取后n行
-n:显示后n行
-f:跟踪显示文件新追加的内容,常用日志监控,通常用户查看日志文件
tail –f /var/log/message,将会全屏显示到屏幕上
cut:命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出
语法格式:cut OPTION...[FILE]...
-d:指定分隔符,如“:”空格等
-f:与-d选项一起使用,指定显示哪个区域
N:第n个字段
N,n:离散的多个字段例如1,3,6
n-n:连续的几个字段如1-6
-c:按字符为单位来切割
假如我先取某些用户的用户名和shell类型,我们知道需要查看/etc/passwd文件,文件的格式是以冒号分隔一共七个字段
Cut –d: -f1,7
paste:合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d:分隔符:指定分隔符,默认用tab
-s:所有行合成一行来显示
Wc:统计指定文件中的字节数、字数、行数,并将统计结果显示输出
语法格式:wc [OPTION]... [FILE]..
-l:计算行数,可以统计某个目录下的文件个数ls /root |wc -l
-w:计算单词数
-c:计算字节数
-m:计算字符总数
sort:将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
语法格式:sort [OPTION]...[FILE]...
-r:执行反方向排序
-n:按数字大小排序
-f:忽略大小写来排序
-u:删除重复的行
-t n:使用n来作为分隔符
-k x:配置-t选项来使用,并且以x列来排序
uniq:从输入中删除重复的前后相接的行
语法格式:uniq [OPTION]...[INPUT [OUTPUT]]
-c:显示每行重复出现的次数
-d:仅显示重复的行
-u:仅显示不重复的行,连续且完全相同为重复
下面我写个文件来测试这几个选项
这个功能可以用来统计某些主机曾经有多少次登录过主机,这个命令常常和sort命令一起使用。
diff:比较两个文件的区别,这个功能对程序员很有用,这个小工具就是perl语言的发明者写了这个非常好用的工具,来发现两个文件之间发生了内容的改变
语法格式: diff [OPTION]... FILES
-u:输出统一的diff格式文件,适用于补丁文件
Diff oldfile new file
grep:
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。Grep,egrep,fgrep(不支持正则表达式搜索)
作用:对文本就行搜索,根据用户指定的模式对文本进行匹配检查,然后将匹配到的内容输出到屏幕上,那模式又是什么呢?
模式:有正则表达式字符及文本字符所编写的过滤条件
语法格式:grep [OPTIONS][-e PATTERN | -f FILE] [FILE...]
参数:
-v:显示不能被模式匹配到的行
-i:忽略字符的大小写
-n:显示匹配的行号
-c:统计匹配的行数
-q:静默模式,在屏幕上不输出任何信息
-A n :显示匹配字符串的后n行
-B n :匹配字符前n行
-C n :匹配字符前后n行
-e:实现多个选项贱的逻辑或关系
-w:整行匹配整个单词
-E:使用扩展正则表达式
正则表达式:有一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或统配的功能
正则表达式又分为两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符分类:字符匹配、匹配次数、位置锚定、分组
字符匹配:
. :匹配任意单个字符
*:匹配其前面的字符任意次
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] :数字
[:lower:] :小写字母
[:upper:] :大写字母
[:alpha:] :大小写字母
[:alnum:] :数字及大小写字母
[:punct:] :标点符号
[:space:] :空白行
次数匹配:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配任意长度的任意字符,贪婪模式:尽可能长的匹配
\?:匹配其前面的字符0次或1次
\+ :匹配其前面的字符至少1次
\{m\} :匹配其前面的字符m次
\{m,n\} :匹配其前面的字符至多n次,最少m次
\{,n\} :匹配其前面的字符至多n次
\{m,\} :匹配其前面的字符至少m次
位置锚定:定位字符出现的位置
^ :锚定行首,用于模式的最左侧,此字符后面的任意内容必须在行首
$ :锚定行尾,用于模式的最右侧,此字符前面的任意内容必须出现在行尾
\<或\b :词首锚定,用于单词模式的左侧,其后面任意的字符串必须作为单词首部出现
\>或\b :词尾锚定,用于单词模式的左侧,其后面任意的字符串必须作为单词尾部出现
\<pattern\>:匹配整个单词
分组:\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(redhat\)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3,……
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(string1\+\(string2\)*\)
\1:string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
\:忽略正则表达式中特殊字符的原有含义,俗称转意
grep使用示例
显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
grep “^[sS].*’ /proc/meminfo
grep -e “^s.*” –e “^S.* /proc/meminfo
显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v “/bin/bash$” /etc/passwd
显示用户rpc默认的shell程序
grep “^rpm\>” /etc/passwd|cut –d : -f7
找出/etc/passwd中的两位或三位数
grep “\<[[:digit:]]\{2,3\}\>” /etc/passwd
显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
grep “^[[:alpha:]]\+[^[:space:]].*”/etc/grub2.cfg
找出"netstat-tan"命令的结果中以‘LISTEN‘后跟0、1 或多个空白字符结尾的行
netstat –tan |grep “LISTEN[01][[:space:]]\+$”
添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行
grep “^\(\<.*\>\)\+.*\1$” /etc/passwd
grep -o “^\([^:]\>)\+.*\1$” /etc/passwd
egrep及扩展的正则表达
egrep=grep –E
字符匹配
[]:匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
次数匹配
.*:匹配任意长度的任意字符,贪婪模式:尽可能长的匹配
?:匹配其前面的字符0次或1次
+ :匹配其前面的字符至少1次
{m} :匹配其前面的字符m次
{m,n} :匹配其前面的字符至多n次,最少m次
{,n} :匹配其前面的字符至多n次
{m,} :匹配其前面的字符至少m次
位置锚定:定位字符出现的位置
^:锚定行首,用于模式的最左侧,此字符后面的任意内容必须在行首
$:锚定行尾,用于模式的最右侧,此字符前面的任意内容必须出现在行尾
\<或\b :词首锚定,用于单词模式的左侧,其后面任意的字符串必须作为单词首部出现
\>或\b :词尾锚定,用于单词模式的左侧,其后面任意的字符串必须作为单词尾部出现
\<pattern\>:匹配整个单词
分组:():将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(redhat\)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3,……
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
或者:
a|b
C|cat:C或cat
(C|c)at:Cat或cat
egrep示例http://blog.51cto.com/user_index.php?action=addblog_new&job=modify&tid=1835119
显示当前系统root、mage或wang用户的UID和默认shell
grep -E “(root|mage|wang)”/etc/passwd |cut –d : -f1,3,7
找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
grep –E “^[[:alpha:]_]\(\).*” /etc/rc.d/init.d/functions
使用egrep取出/etc/rc.d/init.d/functions中其基名
echo “/etc/rc.d/init.d/functions” |grep –Eo “[^/]+/\?$”
使用egrep取出上面路径的目录名
echo “/etc/rc.d/init.d/functions” |grep -Eo “^/.*/$”
统计以root身份登录的每个远程主机IP地址的登录次数
利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
[0-9]
[1-9][0-9]
1[0-9][0-9]
2[0-4][0-9]
24[0-5]
显示ifconfig命令结果中所有IPv4地址
ifconfig|grep -E "\<[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]| 24[0-5]\>\. \<[0-9]|[1-9][0-9]|1[0-9][0-9] |2[0-4][0-9]| 24[0-5]\>\.\<[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]| 24[0-5]\>\. \<[0-9]|[1-9][0-9]|1[0-9][0-9] |2[0-4][0-9]| 24[0-5]\>\.”
本文出自 “运维生涯” 博客,请务必保留此出处http://fszxxxks.blog.51cto.com/10122713/1835119
标签:文本处理工具
原文地址:http://fszxxxks.blog.51cto.com/10122713/1835119