linux之正则表达式

Posted runcheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式

在linux中,通配符是由shell解释的,而正则表达式是由命令解释的。主要的文本处理工具有grep,sed和awk。

 

grep匹配模式

  grep按下述方式接受选项和参数   

  grep [options] regex [files]

 

参数主要有

-i  ------------忽略大小写

-o  ------------只显示匹配的内容

-v  ------------取反,不匹配

-l  -------------输出匹配的文件名

-L  -------------输出不匹配的文件名

-c  -------------count 输出匹配的数目(行数)

-n  -------------输出匹配行同时加上行号

-A  -------------输出匹配行,及其后面的n行

 

正则字符

^  ------------行首标记,在[^]表示非

$ -------------结束标记 \'abc$\'----->abc,hhhhabc

.  -------------任意字符 \'a.c\'-------->abc,atc,ajc

|  -------------    或    --------> \'aaa|bbb\'----->aaa,bbbc

正则范围

? ----------------左边第一个字符出现0次或一次

*  ----------------左边第一个字符出现0到n次

+ -----------------左边第一个字符出现1到n次

{} ----------------{m}{m,n}{m,}{,n}左边第一个字符出现m/m到n/>m/<n 次

()--------------将候选的元素列出来用|分割--(ab|1|2|3)--代表ab1 ab2或ab3

 

例子

grep \'root\' /root/test/z.txt---------------显示z.txt中含有root的行

egrep \'^[a-Z]+[0-9]+[a-Z]\'  z.txt-----------过滤出字母+数字+字母的行

 grep -v "^#" /etc/ssh/sshd_config |grep -v \'^ *$\' /etc/ssh/sshd_config

                                                                        ------------------过滤掉sshd_config文件中所有的#和空行

 

 sed


sed是一种在线编辑器,它一次处理一行内容,可以将数据进行替换、删除、新增、选取等特定工作

  sed的命令格式为

sed  [options]  \'command\'  in_file

 

options

-i:直接修改读取的档案内容

-n:使用安静模式。一半sed用法,文件所有内容都会背列到屏幕上,如果加上-n参数后,只有经过sed特殊处理的那一行才会被列出来。

-e:直接在指令列模式上进行sed的动作编辑

-r:扩展正则表达式

command

\'[地址1,地址2][函数][参数]\'

1:单行

1,3:范围,从第一行到第三行

$:尾行

正则必须用//包裹起来

 

函数

a:新增,a插入的字符串在新的一行出现。

c:取代,c后面接字符串,取代n1,n2之间的行。

d:删除,

i:插入,插入的字符串在目标行的上一行出现。

p: 打印,选择某个行打印出来,通常与sed -n连用。打印固定行

s:取代,替换,通常与正则表达式连用, 例如 1,20s/old/new/g  

 

字符串替换:

sed -n \'s/root/zzzz/p\' z.txt---------替换root为zzzz,并打印出来。如需全部替换,末尾加g

$ sed -n \'s/root/XXXX/2p\' z.txt----替换没行第二个root为,XXXX。

17,打印每行的第一个单词和第三个单词。

 

 

awk


awk是一个好用的数据处理工具!相比sed常常作用于一整行的处理,awk则比较倾向于一行当中分成<字段>来处理,语法如下

              awk  [Options]  \'commands\'  filename

 

Options:

-F:指定字段的分隔符,默认的分割符是连续空格或制表符。

-v:定义变量并赋值

NF变量表示当前记录的字段数。

NR变量表示AWK读入的行数。

 

 

实例:

awk -F: \'$3>=30 && $3<=40{print $1}\' z.txt------------打印uid在30到40范围的用户名

awk -F: \'NR>=5 && NR<=10{print}\' z.txt----------------打印5-10行

awk -F:\'NR%2==1{print NR,$0}\' z.txt ------------------打印奇数行

awk -F: \'NF>5{print NR,$0}\' z.txt ------------------------打印字段数大于5的行

awk-f :\'$3!=$4{print $1}\' z.txt ----------------------------打印uid不等于gid的用户名

 

以上是关于linux之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习8之Shell编程--基础正则表达式

Linux Bash之正则表达式

Linux三剑客之grepegrep及正则表达式使用详解

linux之正则表达式

Linux 之 正则表达式实例

linux之正则表达式