首页 > 代码库 > 查看,统计、正则表达式——Linux基本命令(9)
查看,统计、正则表达式——Linux基本命令(9)
1.文件查看
(1)正向查看
cat
cat -v 显示非打印字符
-E 显示$
-T 显示TAB
-n 显示行号(与nl作用类似)
-s 将连续的重复的空行变成一行(与tr -s作用类似,将多个重复的变成一个,如图将多个换行符变成了一个)
-A = -vET都显示
(2)整个文件反向查看
tac 反向输出 将文件倒过来输出
(3)一行反向查看
rev 将每一行反向输出
2.分页查看文件内容
more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less命令是man命令使用的分页器
3.显示文本前或后行的内容
head
head [OPTION]...[FILE]...
-n #: 指定获取前#行
-#: 指定行数
-c #: 指定获取前#字节
tail
tail [OPTION]...[FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪动态的显示文件新追加的内容,常用日志监控
4. 按列抽取文本cut
cut [OPTION]...[FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
如图,查看/etc/passwd文件(图片只截取了部分内容)
使用cut,以:为分隔符,截取第1个字段(就是用户名那一列)
也可以截取第1,3字段(就是用户名和UID)
同样的,可以截取前三位
-c 按字符切割
如图,将每行第二个字符切割出来
--output-delimiter=STRING指 定输出分隔符
如图,将分隔符改成了“!”
5.paste
paste 合并两个文件同行号的列到一行
paste [OPTION]...[FILE]...
-d “分隔符”:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2 [f3]
paste -s f1 f2 将文件内容变成一行显示
6.文本数据统计WC
wc: word count
wc 行数 单词数 字节(换行符也算一个字节)
wc -m 字符数
-c 字节 (一个字母一个字节,一个汉字三个字节)
-l行数
-w 单词数
7.文本排序
sort
(正常默认按照第一个数字的大小排序)
-n 执行按数字大小整理
-r 执行反方向(由上至下)整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理 能够使用多次
8.uniq
uniq 命令:从输入中删除前后相接的连续重复的行
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
(uniq命令常与sort命令一起配合使用。要想去除非连续的行,就可以先用sort排序)
9.比较文件
比较两个文件之间的区别,可以用diff
可以使用diff -u生成补丁(用于软件升级之类的):
diff -u f1 f2 > diff.log 生成补丁
mv f2 f2.rm 相当于删除了文件
patch -b f1 diff.log 通过补丁还原文件
注:还原之后新生成的文件依然叫f1(其实就是f2),原来的旧的f1会自动命名为f1.orig
mv f1 f2 还原原始的新文件名
mv f1.orig f1 还原原始的旧文件名
diff f2 f2.rm 比较还原回来的新文件与被删除的文件,发现没有区别
10.文本搜索工具
grep: Global search REgulare xpression and Print out the line
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
--color=auto 将匹配的结果着色显示
在centos6中匹配时是没有颜色的,需要加上--color=auto才能将匹配结果着色,但是在centos7中默认就是着色的,因为alise里已经有设置好了别名。
-v 反向匹配 (如grep -v root/etc/passwd将显示所有不带有root的结果)
-i 忽略大小写
-n 显示的结果前增加行号
-c 仅显示匹配到结果的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
或者 &>/dev/null
-A# 显示关键字行及向后#行
-B# 显示关键字行及向前#行
-C# 显示关键字向前#行,当前行,及向后#行
-e 实现多个选项间的逻辑or关系
用法:grep –e‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用扩展正则表达式 或egrep
-F 不使用正则表达式或 fgrep
11.※正则表达式※
(1)REGEXP
由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。
程序支持:grep,sed,awk,vim,less,nginx,varnish等
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
使用方式 grep -E 或 egrep
(2)字符匹配:
. 匹配任意单个字符(类似文件名匹配时的问号)
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字 等于[0-9a-zA-Z]
[:alpha:] 代表任何英文大小写字符 等于[A-Z a-z]
[:digit:] 十进制数字
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广,一般常用space表示空格)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
(3)匹配次数
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
(4)位置锚定
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
如图,只显示以root开头的行
$ 行尾锚定,用于模式的最右侧(同理,只显示以指定内容结尾的行)
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
如图,其实是显示出来匹配的结果的,只是因为是空白所以不太方便看出来
\<或 \b 词首锚定,用于单词模式的左侧(就是单词必须以root开始)
\>或 \b 词尾锚定;用于单词模式的右侧(就是单词必须以root结尾)
\<PATTERN\> 匹配整个单词
(因为单词必须以root开头,也要以root结尾,就是匹配整个单词啦)
如图,不加锚定时rooter alroot这种带有root的单词也会被匹配出来,如果只想匹配root这个单词就在词首词尾都加上锚定,可只显示root的匹配结果。
(5)其他的表达
分组:
\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
正则表达式中的小括号"()"。是代表分组的意思。 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同。注意:\1必须与小括号配合使用。
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。
\2 表示从左侧起第二个左括号以及与之匹配右括号之间的模式所匹配到的字符。以此类推。
示例:\(string1\+\(string2\)*\)
\1 表示string1\+\(string2\)*
\2 表示string2
表示或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
(6)扩展正则表达式
使用扩展的正则表达式可以使命令更简便一些
egrep = grep -E
egrep [OPTIONS]PATTERN [FILE...]
使用egrep或加上-E之后,除了词首词尾锚定和后向引用外,其余之前需要带\的都可以去掉\了。
本文出自 “Ty_endless” 博客,请务必保留此出处http://tyendless.blog.51cto.com/12435756/1952478
查看,统计、正则表达式——Linux基本命令(9)