首页 > 代码库 > 查看,统计、正则表达式——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.※正则表达式※

1REGEXP

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

  程序支持: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

贪婪模式:尽可能长的匹配

.* 任意长度的任意字符

技术分享


\? 匹配其前面的字符01

\+ 匹配其前面的字符至少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: ab    C\|cat: Ccat   \(C\|c\)at:Catcat

 

6)扩展正则表达式

使用扩展的正则表达式可以使命令更简便一些

egrep = grep -E

  egrep [OPTIONS]PATTERN [FILE...]

使用egrep或加上-E之后,除了词首词尾锚定和后向引用外,其余之前需要带\的都可以去掉\了。

技术分享

本文出自 “Ty_endless” 博客,请务必保留此出处http://tyendless.blog.51cto.com/12435756/1952478

查看,统计、正则表达式——Linux基本命令(9)