Linux高级命令详解【乐搏TestPRO】
前面讲过了Linux基本指令的使用,请参考Linux基本指令详解,接下来我们来学习下Linux的高级指令之文本处理工具。Linux中最为常用的三大文本处理工具是grep、awk、sed,掌握好其用法是很有必要的。
一、grep :grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Linux的grep家族包括grep、egrep和fgrep。
常用选项参数释义如下:
-E:开启扩展(Extend)的正则表达式。
-F:将样式视为固定字符串的列表。
-i:忽略大小写(ignore case)。
-v:反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n:显示行号。
-w:精确匹配,被匹配的文本是一个完全的单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker。
-c:显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o:只显示被模式匹配到的字符串。
--color:将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行。
-B n:显示匹配到的字符串所在的行及其前n行。
-C n:显示匹配到的字符串所在的行及其前后各n行。
grep也可以结合正则表达式使用,以下是部分正则的写法和释义:
. :任意一个字符。
[abc]:表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z]:表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123]:匹配一个字符,这个字符是除了1、2、3以外的所有字符。
对于一些常用的字符集,系统做了定义:
[A-Za-z]:a到z及A到Z的字符,等价于 [[:alpha:]]
[0-9]:0到9的数字,等价于[[:digit:]]
[A-Za-z0-9]:a到z及A到Z的字符及0到9的数字,等价于 [[:alnum:]]
tab,space:空白字符,等价于 [[:space:]]
[A-Z]:等价于[[:upper:]]
[a-z]:等价于[[:lower:]]
标点符号:[[:punct:]]
匹配次数:
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。
\? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。
* :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。
位置锚定:
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。
分组及引用:
\(string\) :将string作为一个整体方便后面引用。
\1 :引用第1个左括号及其对应的右括号所匹配的内容。
\2 :引用第2个左括号及其对应的右括号所匹配的内容。
\n :引用第n个左括号及其对应的右括号所匹配的内容。
二、awk: awk文本分析工具awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk内置变量和参数如下:
内置变量:
ARGC:命令行参数个数
ARGV:命令行参数排列
ENVIRON:支持队列中系统环境变量的使用
FILENAME:awk浏览的文件名
FNR:浏览文件的记录数
FS:设置输入域分隔符,等价于命令行-F选项
NF:浏览记录的域的个数
NR:已读的记录数
OFS:输出域分隔符, 默认也是空格,可以设置为其他的 ORS:输出记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
RS:控制记录分隔符
参数选项:
F:指定分隔符
f:调用脚本
v:定义变量
说明:$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
三、sed工具:sed工具用来分析关键字的使用、统计等,还可以将数据进行取代、删除、新增、选取特定行等功能。sed的常用参数选项和命常用令如下:
常用参数选项:
-n:取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e:进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
-f:指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
-r:sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i:直接修改读取的文件内容,而不是由屏幕输出。危险操作
常用命令:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d:删除,因为是删除,所以 d 后面通常不接任何内容
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用
s:取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g
扫描↓领取Linux的镜像文件,Ubuntu、CentOS和vmware安装包