Linux三剑客正则表达式文本流处理工具

1、cat : 查看文件所有内容,并输出到终端
-n : 打印行号

2、more : 分页查看文件,按回车向下翻,空格直接翻页,缺点:只能看一遍,只能从上往下翻。
可配合使用 : man ls | more  

3、less : 文本查看工具,可以任意查看,用回车空格都可以翻页查看,/可以进行查找内容,查找到的内容会高亮,按v可进入vim编辑模式,退出vim模式还是返回less
可配合使用 : man ls | less 但是不能按v进入vim编辑模式
g/G  : 第一页/最后一页

4、head : 查看文件前n行,不加选项-n默认查看前10行
cat -n passwd | head -n 20 : 查看前20行
cat -n passwd | head -n -10 : 查看除了后10行的剩下n行

5、tail : 查看文件的后n行,不加选项-n默认查看后10行
cat -n passwd | tail -n 11 : 查看后11行
cat -n passwd | tail -n +11 : 查看除了文件前11行的后n行
tail -f /var/log/message  : 可以实时查看日志文件的内容
一般用的比较多的是head和tail连用取出中间行的内容

6、grep : 文本行搜索工具,可配合管道|使用
grep root passwd : 查找出含root字符串的行,匹配到的字符串会高亮输出到终端,是从单词中匹配含root的字符串
-w(word)  :  通过指定的单词匹配,也叫精确匹配
-i : 不区分大小写查找
-n(number) : 显示匹配到的行号
-o(only-matching) : 只显示匹配到的字符串,一般配合-n使用显示一行内出现了多少个字符串
-c(count) : 匹配成功就把匹配到的行数统计出来
-v : 去掉匹配到的行,打印匹配到关键字之外的行
-An(A:after,n是number) : 打印出匹配到的行的下n行
-Bn(before,n表示number) : 打印出匹配到的行的上n行
-Cn : 打印出匹配到的行的上n行和下n行
-q(quite --silent) : 静默输出,不管配没匹配到,都不输出到终端,一般用于脚本中做判断,配合$?的退出码使用
-r(recursive) : 递归搜索目录,根据文本内容查找目录,for example : grep -nr HISTSIZE /etc : 查找含HISTSIZE字符串的文件, 打印出具体路径和在文件里面的的第几行出现的 注意: 一般比较耗资源,这一条命令一般用的比较多
-l(--files-with-matches) : 一般会配合-r匹配文件,打印匹配到的文件的名字,for example : grep -rl HISTSIZE /etc,直接输出匹配到文件的完整路径
--color=auto : 匹配到的字符串会高亮


BRE(basic regular express)基本正则表达式 : 支持三剑客,用正则表达式时最好加上'',一般各个地方都可以使用,用于处理文本和字符串的
grep '正则表达式' file 
注意: 空格不能忽略,不要把^string、string$和\<\>搞混,前者匹配的是行,后者匹配的是单词,想要查到到的内容存在多个,比如或者,就需要用\|区别开,对于egrep直接用|就可以了
^string :  以string开头的行,有空格就不能过滤出来
string$ : 以string结尾的行
^$ :  空行
\ string\> : 以string结尾的行
\ : 匹配string,等同于grep -w匹配的是string单词
.  :  表示一个任意的字符
* : 表示前一个字符匹配0-多次
.* : 表示任意0-多个字符
[abc] : 表示匹配一个字符,a或者b或者c
^[abc] : 表示以a或b或c开头的行
[a-z] : 表示小写a-z出现1次
[A-Z] : 表示大写A-Z出现1次
[0-9] : 表示数字0-9出现1次
[a-zA-Z] : 代表所有字母
[^a-zA-Z0-9] : 取出除了大小写字母和数字
[^a] : 取反,取出除了a的其他字符
\  :  去除后面字符的特殊含义
!以下表达式支持扩展注意格式用法:
for example :  
[:alpha:]:匹配字母(不区分大小写)
[:lower:]:匹配小写字母  a-z
[:upper:]:匹配大写字母  A-Z
[:digit:]:匹配数字
[:space:]:匹配空格
[:alnum:]:匹配任意字母或数字
[:punct:]:除空格和字母、数字以外的任何可打印字符

[[:space:]]{2}

ERE(Extend Regular Express)扩展正则表达式,支持正则表达式
egrep 或者 grep -E
+ :  表示+前面的字符出现1-多次
?  : 表示?前面的字符出现0-1次
{m} : 表示前面的字符出现m次
{n,m} : 表示前面的字符出现n到m次
{,m} : 表示前面的字符出现0到m次
{m,} : 表示前面的字符出现m到若干次
exp1 | exp2 : 表示匹配exp1或exp2中的一项,若含有exp1和exp2的字符串则也会匹配出来
tail -f /var/log/messages | egrep -i 'err|warn|den' : 实时显示err或warn或den
()  : 把整个作为一个整体

7、wc(word count) : 统计行数,单词数,字节数
-l(line) : 只统计行数
-w(word) : 只统计单词数
-c(character) : 只统计字节数

8、awk : 用于空格较多的文件中,默认以空格为分隔符
awk  '{print $1}'  password  :  不区分空格的个数,$0是把为过滤出来的输出,$1是空格分隔符后面的第一个字符
-F(指定分隔符)   
awk -F ':' '{print $2}' passwd  :以冒号为分隔符打印第二列

9、cut(把文件的每行和选项分离出来)
-d : 自定义指定分隔符
-f : 指定显示区域的列
-c : 以字符为单位进行分割
cut -d ':'  -f 1 password  :  以':'为分隔符输出第一列
cut -c 2-5 password : 提取每行第2到第5的字符
cut -c 2,5 password : 只提起第2行和第5行的字符

10、sort(对文本文件的行进行排序,默认是升序排序),配合uniq(11)使用可以查重
注意: sort -t -k 会原样输出数据,而awk和cut会取出指定的分隔符前后的数据
-r :  执行反方向排序,降序
-n : 数字排序,一般和-k配合使用
-r : 降序,从大到小
-t : 指定分隔符
-k : 指定列
-u : 先排序,再合并重复行,和uniq效果一样,直接取消重复行排序,运行不显示
sort  -t:  -k3 -n  password   :  以冒号为分隔符指定第三列数字排序,输出的是整个数据,不像cut会分离出来

11、uniq 取出相邻的重复行,一般先进行排序再用uniq
-c : 统计相邻重复行出现的次数

12、sed(stream editor,流编辑器),不加-i选项只在内存中运行和修改、替换,不会对源文件进行操作
sed  '/需要匹配到的文件/对文件进行怎样的操作' 
\%regexp%: 任何能够被regexp匹配到的行,换用%(用其他字符也可以,如:#)为边界符号,是为了防止/regex/的斜杠被使用了,匹配起来有些麻烦
for example : (1)sed -r/-E -n '\@^r@Ip'  password = sed -r/-E -n '/^r/Ip'  password  = sed -r/-E -n '\%^r% Ip'  password   
常用编辑命令 
1)p:打印模式空间中的内容 ,选项加-n
2)d:删除匹配到的行 
3)a \text:append,表示在匹配到的行之后追加内容 
4)i \text:insert,表示在匹配到的行之前追加内容 
5)c \text:change,表示把匹配到的行和给定的文本进行交换 
6)s/regexp/replacement/flages:查找替换,把text替换为 regexp匹配到的内容(其中/可以用其他字符代替,例如@) 
     其他编辑命令: 
    g:全局替换,默认只替换第一个 
    i: 不区分大小写 
    p:如果成功替换则打印
-n(--quite,--silent) : 静默输出,一般和p配合使用,和grep -q作用大同小异,配合p也是输出已经进行操作后匹配到的行
-r(regexp-extended) : 支持扩展正则表达式
-E : 与-r一样
-i : 修改文件内容
sed -r/-E -n '/^r/Ip'  password :  /接的正则表达式/,I(大写的i,表示忽略大小写),p(print,打印出来),匹配password中以r开头并忽略大小写r的行 
###地址定界: 
sed -n -r '3,+4 p'  passwd : 打印第3行和第3行下面的4行
sed '2 s(search)/root/huawei/'  password : 2表示第2行,把第2行的第一个root替换成huawei,替换成功会输出所有的数据,包括已经替换成功的
sed -n '2 s(search)/root/huawei/pI'  password : I(大写的i)忽略大小写,表示不区分大小写匹配,把root替换成huawei,打印出来,打印的是匹配到的行,Root也能匹配到
sed -n '2 s(search)/root/huawei/Igp'  password : g是global表示全局的,I(大写的i)忽略大小写,把第二行中所有匹配到的不区分大小写输出
sed -n '$ s/root/huawei/p' passwd  : 把最后一行的root替换成huawei,并打印出来结果
sed -n '/root/p' passwd | cat -n :  把含有字符root的行打印出来,并显示行号
sed '1,5d' passwd :  删除1到5行
sed -n 5p passwd : 打印第5行
sed -n '$p' passwd : 打印最后一行,包括空行
sed -n '2a(append) \huawei' passwd : 在第二行下面另起一行,加huawei内容
sed -n '2i(insert) \huawei' passwd : 在第二行上面另起一行,加huawei内容
sed -n '2c(change) \huawei' passwd : 把第二行替换成huawei
sed -n '1,5p' passwd  :  打印第1到第5行
sed -i.bar  '1,5d' passwd  :  拷贝为.bar文件并删除1,5行改变源文件,注意.bar文件没有被改变
sed  's/root/huawei/g'  passwd  : 把每一行所有的root替换成huawei
sed  's/root/huawei/'  passwd  : 替换每行的第一个匹配的root为huawei
用替换可以删除内容(不是删除行)
sed 's/root//'  passwd  :  删除所有行的第一个root
sed 's/root//g'  passwd : 删除所有行的root
sed -n '1 s/root//2p' passwd : 删除第1行的第2个root
sed 's/^/#/'  passwd  : 每行开始加注释,^表示以空开头
sed 's/^.//'   passwd  : 删除每行的第一个字母

grep  awk  sed 三剑客
grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

你可能感兴趣的:(Linux系统,linux,服务器,运维,centos)