5.22 日志 linux 正则表达式相关

1、grep 命令

        grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

[root@www ~]# grep [-acinv] [--color=auto] '查找字符串'  filename 

参数:

-a 不要忽略二进制数据。

-c 计算符合范本样式的列数。

-i 忽略字符大小写的差别。

-n 在显示符合范本样式的那一列之前,标示出该列的编号。

-v 反转查找。

以下练习中 设置别名 alias grep='grep  --color=auto'

练习范文 来自http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt

  1. grep -n  'the' regular_express.txt
  2. grep -vn  'the' regular_express.txt
  3. grep -in  'the' regular_express.txt
  4. grep -n 't[ae]st'  regular_express.txt 
  5. grep -n '[^g]oo' regular_express.txt 
  6. grep -n '[^a-z]oo' regular_express.txt   [:lower:] 代表a-z
  7. grep -n '[0-9]' regular_express.txt    [:digit:] 代表0-9
  8. grep -n '^the' regular_express.txt   只保留在行首出现的字符  ^
  9. grep -n '^[^a-zA-Z]' regular_express.txt  不是英文字母开头的  也可用 [:alpha:]
  10. grep -v '^$' regular_express.txt|grep -v '#'  去掉空白行 和 以#开头的注释行

2、. 小数点代表任意一个字符,* 代表重复前一个0到无穷多次

  1. grep -n 'g..d' regular_express.txt
  2. grep -n 'oo*' regular_express.txt 
  3. grep -n 'goo*g' regular_express.txt   开头结尾都是g 中间至少一个o
  4. grep -n 'g.*g' regular_express.txt  g开头 g结尾  .* 代表0个或多个任意字符
  5. grep -n 'o\{2\}' regular_express.txt  两个连续oo  需要对{} 进行转义
  6. grep -n 'go\{2,5\}g' regular_express.txt  2到5个o   2个以上的话 保留 逗号  去掉5

3、基础正则表达字符如下:

    ^word  , word$ ,  点  ,  * , \  , [list] , [n1-n2] , [^list] , \{n,m\}


4、 sed 工具

   语法  sed [-hnv] [-e<script>]  [-f scriptfile]  file(s)

参数

-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。

-V或--version 显示版本信息。

动作 [n1 [,n2]] 

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~

s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

练习 

  1. nl  /etc/passwd |sed   '2,5d'    列出 并删除2 到5行  ‘2,$’2到最后一行
  2. nl  /etc/passwd |sed '2a drink tea'   第2行后 加上drink tea   2i  是在第2行前加 
  3. nl  /etc/passwd |sed '2,5c No 2-5 number'  2~5行 替换为了 后面的字符串
  4. nl  /etc/passwd |sed  -n '5,7p'  列出 文件内的5-7行 
  5. sed 's/要被替换的字符串/新的字符串/g'  查找替换功能
  6. sed -i 's/\.$/\!/g' regular_express.txt   直接将. 改为!   

5、扩展正则表达式 

  1. + 重复一个或一个以上的前一个RE字符 egrep -n 'go+d' regular_express.txt
  2. ? 0或1次 前一个re字符 egrep -n 'go?d' regular_express.txt
  3. | 代表或   egrep -n 'gd|good' regular_express.txt  
  4. () 组   egrep -n 'g(la|oo)d' regular_express.txt
  5. ( )+   多个重复组的判别  echo 'AxyzxyzxyzC'|egrep 'A(xyz)+C'

6、awk 数据处理工具

语法 awk ‘条件类型1{动作1} 条件类型2 {动作2}... ’filename 

  1. last -n 5 | awk '{print $1 "\t" $3}'  取出账号与登陆者的ip  且以【tab】分开 $1 代表变量1
  2. last -n 5|awk '{print $1 "\t lines:" NR "\t columns:" NF }'      变量 NR  NF(每一行拥有的字段总数)
  3.  cat /etc/passwd|\
    > awk '{FS=":"} $3<10 {print $1 "\t " $3}'    FS 目前的分割字符
  4.  cat /etc/passwd|awk 'BEGIN {FS=":"} $3<10 {print $1 "\t " $3}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值