linux geep命令,sed,grep,awk是三个很实用的文字处理命令

(96) 2024-05-19 12:01:01

sed,grep,awk是三个很实用的文字处理命令,他们能和正则表达式能够很多的结合,让你的脚本搜索显现出强大的能力。

1.

正则表达式:

常用的元字符

.

匹配除换行符以外的任意字符

\w匹配字母或数字或下划线或汉字

\s

匹配任意的空白符

\d

匹配数字

\b

匹配单词的开始或结束

以上元字符字母变为大写想反匹配

^

匹配字符串的开始

$

匹配字符串的结束

[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou这几个字母以外的任意字符

常用限定符

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

*?重复任意次,但尽可能少重复+?重复1次或更多次,但尽可能少重复??

重复0次或1次,但尽可能少重复{n,m}?

重复n到m次,但尽可能少重复{n,}?

重复n次以上,但尽可能少重复

捕获(exp) 匹配exp,并捕获文本到自动命名的组里(?exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp)

匹配exp,不捕获匹配的文本,也不给此分组分配组号位置指定(?=exp)

匹配exp前面的位置(?<=exp)匹配exp后面的位置(?!exp)

匹配后面跟的不是exp的位置(?匹配前面不是exp的位置注释(?#comment) 这种类型不对正则表达式的处理产生任何影响,用于提供注释让人阅读其它表达式

\a

报警字符(打印它的效果是电脑嘀一声)

\b 通常是单词分界位置,但如果在字符类里使用代表退格\t 制表符,Tab

\r 回车\v 竖向制表符\f 换页符\n 换行符\e Escape

\0nn ASCII代码中八进制代码为nn的字符\xnn ASCII代码中十六进制代码为nn的字符\unnnn Unicode代码中十六进制代码为nnnn的字符\cN ASCII控制字符。比如\cC代表Ctrl+C

\A 字符串开头(类似^,但不受处理多行选项的影响)

\Z 字符串结尾或行尾(不受处理多行选项的影响)

\z 字符串结尾(类似$,但不受处理多行选项的影响)

\G 当前搜索的开头

grep

grep格式:

grep [选项]基本正则表达式[文件]

这里基本正则表达式可为字符串。

在用grep进行查询时注意事项:

1.

查询字符串特别是多个字符时应该用“”,如 grep “linuxdn” 这样做的好处有两个,一是防止被误认为shell命令;二是防止被误认为文件,如

grep linuxdn dd查询结果可能为” No such file or

directory”.

2.

在调用变量也要使用双引号,诸如:grep “$linuxdn”

file,如果不这样,将,没有返回结果。

3.

在调用模式匹配时,应使用单引号如 grep ‘l…n’ file.

4.

查询特殊字符进要用\

grep选项

常用选项

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

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

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

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

-n 显示匹配行及行号。

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

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

其它选项

-a 忽略二进制数据

-A 搜索符合字符串后依指定行数之后行数的所有显示

-b 显示符合模板样式的前一行,标出第一个字的位置

-B搜索符合字符串后依指定行数之前行数的所有显示

-C 输出匹配行的计数与之后指定行的行数内容

-d 指定搜索的为目录

-e 搜索指定字符串的文件内容(模板样式)

-E搜索指定字符串的文件内容(普通表示法)

-f 指定模板文件

-F 模板样式为固定字符串列表

-G模板样式为普通列表

-H查询多文件时显示文件名

-I 列出文件内容符合指定模板的文件名

-L列出文件内容不符合指定模板的文件名

-q 不显示任何信息

-V显示版本信息

-y 与-I相同

--help 帮助信息

grep 举例说明

有interface文件内容如下:

# and how to activate them. For more

information, see interfaces(5).

# The loopback network

interface

auto lo eth1

iface lo inet loopback

# The primary network

interface

allow-hotplug eth0

iface eth0 inet static

address 193.168.20.203

netmask 255.255.255.0

network 193.168.20.0

broadcast 193.168.20.255

gateway 193.168.20.1

# dns-* options are implemented by the resolvconf package, if

installed

dns-nameservers 202.106.0.20

dns-search rising.com.cn

iface eth1 inet static

address 192.168.110.148

netmask 255.255.255.0

有passwd 文件内容如下:

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh

proxy:x:13:13:proxy:/bin:/bin/sh

www-data:x:33:33:www-data:/var/www:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

list:x:38:38:Mailing List

Manager:/var/list:/bin/sh

irc:x:39:39:ircd:/var/run/ircd:/bin/sh

gnats:x:41:41:Gnats Bug-Reporting

System (admin):/var/lib/gnats:/bin/sh

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

rising:x:1000:1000:rising,,,:/home/rising:/bin/bash

sshd:x:100:65534::/var/run/sshd:/usr/sbin/nologin

mysql:x:101:103:MySQL

Server,,,:/var/lib/mysql:/bin/false

Debian-exim:x:102:104::/var/spool/exim4:/bin/false

ftp:x:103:65534::/home/ftp:/bin/false

1.

在多个文件中查询字符串

如果要在当前目录下所有.txt文件中查找字符串“

linuxdn”,方法如下:

# grep "linuxdn" *.txe

或在所有文件中查询单词“ linuxdn

# grep "linuxdn" *

2.

行匹配

查询# grep -c "1" passwd

10

grep返回数字10,意义是有10行包含字符串“1”。

3.

显示显示满足匹配模式的所有行行数

#grep -n "1" passwd

2:daemon:x:1:1:daemon:/usr/sbin:/bin/sh

7:man:x:6:12:man:/var/cache/man:/bin/sh

11:uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh

12:proxy:x:13:13:proxy:/bin:/bin/sh

17:gnats:x:41:41:Gnats Bug-Reporting

System (admin):/var/lib/gnats:/bin/sh

19:rising:x:1000:1000:rising,,,:/home/rising:/bin/bash

20:sshd:x:100:65534::/var/run/sshd:/usr/sbin/nologin

21:mysql:x:101:103:MySQL

Server,,,:/var/lib/mysql:/bin/false

22:Debian-exim:x:102:104::/var/spool/exim4:/bin/false

23:ftp:x:103:65534::/home/ftp:/bin/false

4.

显示非匹配行

#grep –v "1" passwd

root:x:0:0:root:/root:/bin/bash

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

www-data:x:33:33:www-data:/var/www:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

list:x:38:38:Mailing List

Manager:/var/list:/bin/sh

irc:x:39:39:ircd:/var/run/ircd:/bin/sh

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

5.

精确匹配

使用geep精确匹配方式是在抽取字符串后加\ >假定在interface中精确抽取含有203的一行

方法如下:

#grep '203\>'

interfaces

address 193.168.20.203

6.

带范围匹配

如在interfacek 查找含有192 和 193 的行

#grep '19[23]' interfaces

address 193.168.20.203

network 193.168.20.0

broadcast 193.168.20.255

gateway 193.168.20.1

address

192.168.110.148

7.

带元字符查询

查询interface首行是allow

#grep '^allow' interfaces

allow-hotplug eth0

查询首行不是address

#grep '^[^address]'

interfaces

# This file describes the network

interfaces available on your system

# and how to activate them. For more

information, see interfaces(5).

# The loopback network

interface

iface lo inet loopback

# The primary network

interface

iface eth0 inet static

address 193.168.20.203

netmask 255.255.255.0

network 193.168.20.0

broadcast 193.168.20.255

gateway 193.168.20.1

# dns-* options are implemented by the resolvconf package, if

installed

dns-nameservers 202.106.0.20

dns-search rising.com.cn

iface eth1 inet static

address 192.168.110.148

netmask

255.255.255.0

8.

次数查询相关内容

查询interface中l出现有2次的行

#grep 'l\{2,\}' interfaces

allow-hotplug eth0

# dns-* options are implemented by the resolvconf package, if

installed

9.

grep 利用与,或操作

查询193或192出现的行

#grep -E '192|193'

interfaces

address 193.168.20.203

network 193.168.20.0

broadcast 193.168.20.255

gateway 193.168.20.1

address

192.168.110.148

10.

查询空行,可利用^ $进行查询

#grep

‘^$’ interface

11.

利用正则表达式进行查询

查询interface 中193.168.20.*的IP

#grep '193.168.20.[0-9]\{1,3\}'

interfaces

address 193.168.20.203

network 193.168.20.0

broadcast 193.168.20.255

gateway 193.168.20.1

12.

利用系统查询

grep 的一个强大功能就是和一些系统命令结合使用比如ls,find,ps等,关于这方面例子就太多了,我就不再说了,等大家在工作学习中慢慢体会吧。

今天很累了写了这么多,可以休息一会了,哈哈。以后我们再说关于awk,和sed。

THE END

发表回复