微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

1.文件查看

1)正向查看

cat

cat -v显示非打印字符

-E 显示$

wKioL1l_G5eAsOvcAAB1V99I9kQ267.png


-T显示TAB

wKiom1l_G5ixvK89AABMKT6wMwc549.png


-n显示行号(与nl作用类似)

wKioL1l_G5ijvQAPAAAOw5rFj2M066.png

wKiom1l_G5nzVlkWAAANKVjgejk538.png


-s 将连续的重复的空行变成一行(与tr -s作用类似,将多个重复的变成一个,如图将多个换行符变成了一个

wKioL1l_G5nQCxvpAACHXF2WPOU111.png


-A = -vET显示


2)整个文件反向查看

tac反向输出 文件倒过来输出

wKiom1l_G5mQTXvfAAANVeWbMlU589.png


3)一行反向查看

rev 将每一行反向输出

wKiom1l_G5rzoXm6AAAWdnC9sBY259.png


2.分页查看文件内容

more: 分页查看文件

more [OPTIONS...] FILE...

-d: 显示翻页退出提示

less:一页一页地查看文件STDIN输出

查看时有用的命令包括

/文本 搜索 文本

n/N 跳到下一个 一个匹配

less命令是man命令使用的分页

3.显示文本前或后行的内容

head

head [OPTION]...[FILE]...

-n #: 指定获取#

-# 指定行数

wKioL1l_G5rwANTmAABgNgV0hts897.png


-c #: 指定获取#字节

wKioL1l_G5qQ9hPDAAANnoIbuj4873.png


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文件图片截取了部分内容

wKiom1l_G5vyzJy1AACNJtkQNkg034.png

使用cut,以:为分隔符,截取1个字段(就是用户名那一列)

wKiom1l_G5zj9_PEAAAxUzDttFM463.png

也可以截取1,3字段(就是用户名UID

wKioL1l_G5zBsdXnAAA51aPPg6k777.png

同样的,可以截取前三位

wKioL1l_G52ShjcVAAA8ofdBrgc641.png

-c按字符切割

wKiom1l_G52AdwHJAAAdFVAowGY891.png

如图,将每行第二个字符切割出来

--output-delimiter=STRING指 定输出分隔符

wKiom1l_G57Rh7jNAABKB5pyPUE528.png

如图,将分隔符改成了“!”

5.paste

paste合并两个文件同行号的列到一行

paste [OPTION]...[FILE]...

wKioL1l_G56xSiHKAAAz-qO4Y3M523.png


-d “分隔符:指定分隔符,认用TAB

wKiom1l_G5_AXvKTAAAXgp3831s722.png


-s : 所有行合成一行显示

paste f1 f2 [f3]

paste -s f1 f2 文件内容变成一行显示

wKioL1l_G5-ijcnmAAARVdKsrFQ203.png

6.文本数据统计WC

wc: word count

wc 行数 单词数 字节(换行符也算一个字节)

wKioL1l_G6DBosjyAAAfC_iOLN4970.png


wc -m字符数

-c 字节 一个字母一个字节,一个汉字三个字节)

wKiom1l_G6DzGxW9AABpBNitnQc548.png

-l行数

-w 单词数

7.文本排序

sort

wKiom1l_G6HyEb1LAABhlZ7jPak995.png

(正常认按照第一个数字的大小排序)

-n 执行按数字大小整理

wKioL1l_G6HiUT2UAAAxSnGeCAw423.png


-r 执行反方向(由上至下)整理

wKioL1l_G6GybipSAAA0B1HYakQ832.png

-f 选项忽略(fold)字符串中的字符大小写

wKiom1l_G6LBEO8JAAAtESju3Dk018.png


-u 选项(独特,unique删除输出中的重复行

wKiom1l_G6Li1pZzAABrSmIT60c247.png


-t c 选项使用c做为字段界定符

-k X 选项按照使用c字符分隔的X列来整理 能够使用多次

8.uniq

uniq命令:从输入中删除前后相接的连续重复的行

uniq [OPTION]... [FILE]...

-c: 显示每行重复出现的次数

wKioL1l_G6PyEK4hAAAgjIVZBAQ216.png


-d: 显示重复过的行

wKioL1l_G6Pg9WpSAAAKe2i18xI919.png


-u: 显示不曾重复的行

wKiom1l_G6OznojgAAAPOxqPx08760.png


uniq命令常与sort命令一起配合使用。要想去除非连续的行,就可以先用sort排序)

wKiom1l_G6Sx164aAAAQ1F2V9AE598.png


9.比较文件

比较两个文件间的区别,可以用diff

wKioL1l_G6SD6b0XAAAqc4zcaqo615.png


可以使用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 将匹配的结果着色显示

wKioL1l_G6WCSb9mAAAyq_JjXY4392.png

wKiom1l_G6XTAyEBAAA1hYrBwiw283.png

centos6中匹配时是没有颜色的,需要加上--color=auto才能将匹配结果着色,但是在centos7认就是着色的,因为alise里已经有设置好了别名。

-v反向匹配 (如grep -v root/etc/passwd显示所有不带有root的结果)

-i忽略大小写

wKioL1l_IezxjM0vAAA1giYmXx4388.png


-n显示的结果前增加行号

-c 显示匹配到结果的行数

-o显示匹配到的字符串

wKiom1l_Ie2hkIjPAAAx2Vy5XSU396.png


-q模式,不输出任何信息

或者 &>/dev/null

-A#显示关键字行及向后#

-B#显示关键字行及向前#

wKiom1l_Ie2A_D68AABliSuBVoE363.png


-C#显示关键字向前#行,当前行,及向后#

wKioL1l_Ie2hUh-QAAA-9vHHQEg347.png


-e实现多个选项间的逻辑or关系

用法grep �Ce‘cat ’ -e ‘dog’ file

wKiom1l_Ie7yhECVAAAh_rkeUfw679.png


-w 匹配整个单词

wKioL1l_Ie7yGhOGAAAxJZpOQPE005.png


-E使用扩展正则表达式 egrep

-F不使用正则表达式或 fgrep

11.※正则表达式※

1REGEXP

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

程序支持grep,sed,awk,vim,less,Nginx,varnish

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

使用方式 grep -Eegrep

2)字符匹配:

. 匹配任意单个字符(类似文件名匹配时的问号)

wKiom1l_Ie7DzMmlAAAi3imYuDw540.png


[] 匹配指定范围内的任意单个字符

wKioL1l_Ie_Tft8oAABhIwjL8OI557.png


[^] 匹配指定范围外的任意单个字符

wKioL1l_Ie_gd6f0AAAuY8zo0Ag708.png


[:alnum:] 字母和数字 等于[0-9a-zA-Z]

[:alpha:] 代表任何英文大小写字符 等于[A-Z a-z]

[:digit:] 十进制数字

[:lower:] 小写字母[:upper:] 大写字母

wKiom1l_IfCQgV8lAABSXCmSv2U308.png


[:blank:] 空白字符(空格和制表符)

[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广,一般常用space表示空格)

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...

[:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

3)匹配次数

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

*匹配前面的字符任意次,包括0

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

.*任意长度的任意字符

wKioL1l_IfCC77NTAAA6JlgJ1s8415.png


\?匹配其前面的字符01

\+匹配其前面的字符至少1

wKiom1l_IfGjYcQ1AAD90TNDAhY161.png


\{n\}匹配前面的字符n

\{m,n\}匹配前面的字符至少m次,至多n

\{,n\}匹配前面的字符至多n

\{n,\}匹配前面的字符至少n

wKiom1l_IfHwdQ5TAABHa9FVujI090.png


4)位置锚定

位置锚定:定位出现的位置

^行首锚定,用于模式的最左侧

wKioL1l_IfGDQerjAAAxZ1RwjF8205.png

如图,只显示root开头的行

$行尾锚定,用于模式的最右侧(同理,只显示指定内容结尾的行)

^PATTERN$ 用于模式匹配整行

^$ 空行 (直接回车)

^[[:space:]]*$ 空白行(包括空格 Tab 和换行符)

wKioL1l_IfKAkAhzAAAzpkWlIDc351.png

如图,其实是显示出来匹配的结果的,只是因为是空白所以不太方便看出来

\< \b词首锚定,用于单词模式的左侧(就是单词必须以root开始)

\> \b词尾锚定;用于单词模式的右侧(就是单词必须以root结尾)

\<PATTERN\>匹配整个单词

(因为单词必须以root开头,也要以root结尾,就是匹配整个单词啦)

wKiom1l_IfLQyGekAABMF513d5A526.png

如图,不加锚定时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之后,除了词首词尾锚定和后向引用外,其余之前需要带\的都可以去掉\了。

wKioL1l_JaqDRzfHAABHmI6na6w681.png

原文地址:https://www.jb51.cc/regex/358141.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐