ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

正则表达式-鸟哥的Linux私房菜基础版本(第二版)笔记9

vi grep awk sed 等工具都支持正则表达式
基础正则表达式
通过grep选取字符串
     gerp [-acinv] '搜索的字符串' filename
     选项:
         -a 在二进制文件中,以文本文件的方式搜索数据
         -c 计算找到'搜索的字符串'的次数
         -i 忽略大小写
         -n 输出行号
         -v 反向选择,即找出不含有该字符串的那一行
         -E 支持扩展正则表达式
     搜索特定字符串
         grep -n 'the' regular_express.txt
         搜索含有the的行,并显示行号
     利用[]来搜索集合字符
         grep -n 't[ae]st' regular_express.txt
         可以搜索到含有test tast的行
         grep -n '[^g]oo' regular_express.txt
         搜索 'oo'当前面不是g
         grep -n '[^a-z]oo' regular_express.txt
         搜索 'oo' 前面不能是小写字母
         可以通过这种方式表示字母和数字 [a-zA-Z0-9]
     行首和行尾字符^$
         grep -n '^the' regular_express.txt
         在一行字符串里查找the 并且the仅能在行首
         grep -n '^[a-z]' regular_express.txt
         查找小写字母开头的行
         ^早在[]里表示反向,外面表示行首
         grep -n '\.$' regular_express.txt
         查找.结束的行 小数点是特殊字符所以要用转义符
         grep -n '^$' regular_express.txt
         查找空行
     任意一个字符(.)与重复字符(*)
         grep -n 'g..d' regular_express.txt
         查找g??d字符串
         grep -n 'ooo*' regular_express.txt
         查找至少含有两个o的行
         grep -n 'g.*g' regular_express.txt
         查找g开头并且g结尾的字符串
     限定连续重复字符范围{}
         因为大括号在shell脚本里特殊意义,所以需要加上转义符
         grep -n 'o\{2\}' regular_express.txt
         查找有两个o相连的行
         grep -n 'go\{2,5\}g' regular_express.txt
         查找g开头g结尾,并且中间带有2-5个o的字符串
重要的特殊字符(characters)   
         RE字符          含义
         ^word         待搜索的字符串(word)在行首
         word$        待搜索的字符串(word)在行尾
         .            代表一个任意字符,一定是一个字符
         \            转义符,去掉特殊符号的特殊含义
         *            重复另个或多个的前一个重复字符
         \{n,m\}        连续n到m个字符
         \{n\}        连续n个前一个字符
         \{n,\}        连续n个以上的前一个字符
         []            字符中的重复 特殊字符的符号
                     []中仅代表一个待搜索的字符
         [^]            搜索的字符不能是方括号中的字符
扩展正则表达式
     egrep支持扩展正则表达式
         RE字符             含义
            +        重复“一个或一个以上”的字符
            ?        0个或1个字符
            |        用或(or)的方式找出数个字符串
            ()        找出用户组字符串
     printf 格式化显示
         关于格式方面的几个特殊样式:
             \a 警告的声音输出
             \b 退格键
             \f 清除屏幕
             \n 输出新的一行
             \r enter的输入
             \t 水平制表符tab
             \v 垂直制表符tabl
             \xNN NN为两位数字,可以转换数字(十六进制)成字符
         在C语言中常见的变量格式
             %ns n是数字,s代表string 即多少个字符
             %ni n是数字,i是integer 即多少整数字符
             %N.nf n和N都是数字,f是float 假设要10位,小数两位%10.2f
sed工具简介
     选项:
         -n 使用安静(silent)模式,在一般sed的用法中,所有来自stdin
             的数据一般都会显示在屏幕上
         -e 直接在命令行模式上进行sed的操作编辑
         -f 直接将sed的操作写在一个文件内,-f filename则执行filename
             内的sed操作
         -r sed的操作支持的是扩展正则表达式的语法
     操作说明:[n1[,n2]]function
         n1,n2不一定存在,一般代表  选择进行操作的行数,例如 需要在10-20
         行之间进行,则10,20[function]
     function 有下面的这些操作
         a 新增 后面可以接字符串,而这些字符串会在新的一行出现
         c 替换 c的后面可以接字符串,这些字符可以替换n1,n2之间的行
         d 删除 因为是删除所以d后面一般不跟任何内容
         i 插入 i后面的字符串会在新的一行出现
         p 打印 即打印某个选择的数据 通常和sed -n一起使用
         s 搜索 不但可以搜索,而且可以替换,可以和正则表达式一起使用
     例:
         显示/etc/passwd的内容,并且需要打印行号,同时将2-5行删除
             nl /etc/passwd | sed '2,5d'
         在上面的第二行后,加上 drink tea? 字样
             nl /etc/passwd | sed '2a drink tea\?'
         在第二行的后面加入两行字 'aadfs' 'adsfadfs'
             nl /etc/passwd | sed '2a aadfs \
             > adsfadfs'
         将第2-5行替换为 “NO 2-5 number”   
             nl /etc/passwd | sed '2,5c NO 2-5 number'
         仅打印3-7行
             nl /etc/passwd | sed -n '3,7p'(-n必须加上)
         打印lo 仅留下IP地址
             ifconfig lo | grep 'inet ' | sed 's/^.*地址://g' | sed 's/掩码:.*//g'
awk工具简介
         awk '条件类型1{动作1} 条件类型2{动作2}...' filename
         awk主要处理 每一行字段内的数据 默认的字段分隔是空格或tab
     内置变量
         变量名称        代表的含义
         NF                每一行($0)拥有的字段的总数
         NR                当前awk所处理的是第几行数据
         FS                当前的分隔符,默认是空格键
     awk的逻辑运算字符
         运算单元        代表意义
         >                大于
         <                小于
         >=                大于等于
         <=                小于等于
         ==                等于
         !=                不等于
     例如:
         要查看第三栏小于10以下的数据,并且仅列出账号与第三栏
         cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
文件数据比较与显示的相关功能       
     文件比较diff  diff [-bBi] from-file to-file
         用于比较两个文件之间的不同一般用在ascii文件的比较
     参数:
         from-file 一个文件名,作为原始比较文件的文件名
         to-file 作为目的比较文件的文件名
     选项:
         -b 忽略一行的多个空白差异
         -B 护绿空白行的不同
         -i 忽略大小写的差异
         4d3 左边第四行被删除
         6c5 左边第6行被换成右边文件的第五行
     cmp 比较两个文件,用位去比
         -s 将所有不同点全部列出来,默认只列出一个
     patch 将旧内容更新到新版
         patch -pN < patch_file
     选项:
         -p 后面可以接 取消几层目录
文件打印准备:pr
     具体查文档
sed和gawk工具的功能非常强大   更多关于sed和gawk的内容请等待shell编程部分的笔记

2015-12-25
                         
暂无评论

发表回复