免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 761 | 回复: 0
打印 上一主题 下一主题

sed,grep,awk是三个很实用的文字处理命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-11 09:33 |只看该作者 |倒序浏览
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的位置
注释
(?#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。                     



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/51067/showart_829029.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP