linux正则表达式 grep egrep用法

shell命令执行的相应顺序

&&

命令1 && 命令2 如果这个命令1执行成功&&那么执行这个命2
mv myfile myfile2 && echo "if you are seeing this then mv was success!"

||

如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2)

mv myfile myfile2 && echo "if you are seeing this then mv was success! "

从一个审计文件中抽取第1个和第2个域,并将其输出到一个临时文件中,如果这一操作未成功,我希望能够收到一个相应邮件:

awk '{print$1,$2}' test3 >test2 || echo "sorry the extraction didn't work " | mail root



(命令1;命令2;. . .)
如果使用{ }来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。

例子:

如果sort命令执行成功了,可以先将输出文件备份,然后再打印

test.sorted && (cp test.sorted test.sorted_bak ;lp test.sorted)

经常使用的正则表达式举例

^                  行首
$                  行尾
^[the]             以the开头行
[Ss]igna[lL]       匹配单词signal、signaL、Signal、SignaL
[Ss]igna[lL]".     同上,但加一句点
[mayMAY ]          包含may大写或小写字母的行
^USER$             只包含USER的行
[tty]$             以tty结尾的行
".                 带句点的行  
^d..x..x..x        对用户、用户组及其他用户组成员有可执行权限的目录
^[^l]              排除关联目录的目录列表
^[^d]              ls –l | grep ^[^d] 只显示非文件夹的文件
[.*0]              0之前或之后加任意字符
[000*]             000或更多个
[iI]               大写或小写I
[iI][nN]           大写或小写i或n
[^$]               空行
[^.*$]             匹配行中任意字符串
^......$           包括6个字符的行
[a-zA-Z]           任意单字符
[^0-9$]            非数字或美元标识
[^0-9A-Za-z]       非数字或字母
[123]              1到3中一个数字
[Dd]evice          单词device或Device
De..ce             前两个字母为De,后跟两个任意字符,最后为ce
"^q                以^q开始行
^.$                仅有一个字符的行
^".[0-9][0-9]      以一个句点和两个数字开始的行
'"Device"'         单词device
De[Vv]ice".        单词Device或device
[0-9]"{2"}-[0-9]"{2"}-[0-9]"{4"}                 对日期格式dd-mm-yyyy
[0-9]"{3"}".[0-9]"{3"}".[0-9]"{3"}".[0-9]"{3"}   IP地址格式
[^.*$]              匹配任意行
[A-Za-z]*           匹配所有单词

常用的grep选项

-c 只输出匹配行的计数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

例子

grep -v "Sort" tab2 显示不包含匹配文本的所有行

grep -n "Sort" tab2 显示匹配行及行号

grep -c "Sort" tab2 只输出匹配行的计数

精确匹配: grep "01">" tab2

grep -in "code" tab2 忽略大小写

多次过滤

grep -in "code" tab2 | grep "02"

使用grep匹配“与”或者“或”模式

grep命令加-E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为219或216,方法如下:

grep –E ‘219|216’ tab2

grep允许使用国际字符模式匹配或匹配模式的类名形式

类                 等价的正则表达式

[[:upper:]]        [A-Z]

[[:alnum:]]        [0-9a-zA-Z]

[[:lower:]]        [a-z]

[[:space:]]        空格或t a b键

[[:digit:]]        [0-9]

[[:alpha:]]        [a-zA-Z]

 

大多数系统管理员称/dev/null为比特池, 可以将之看成一个无底洞,有进没有出,永远也不会填满。

要查看DNS服务器是否正在运行(通常称为named),方法如下

ps -ef | grep "name"|grep -v "grep"

egrep

egrep接受所有的正则表达式,一个显著特性是可以以一个文件作为保存的字符串,然后将之传给egrep作为参数,为此使用- f开关。

egrep -f par2 tab2 par2是文件,里面包括各种匹配的具体格式


如果要查询存储代码3 2 L或2 C C,可以使用(|)符号,意即“|”符号两边之一或全部。
egrep '(Code|Sort)' tab2