【学习笔记——Linux】Linux正则表达式和文件格式化处理

Linux正则表达式和文件格式化处理

Table of Contents

  • 1 grep
  • 2 sed
  • 3 printf (原来还有这个命令)
  • 4 awk
  • 5 文件对比

1 grep

  • cat xxx | grep -n -A3 -B2 'eth' 将xxx文件中包含eth的行,以及它前面的两行,后面的三行都显示出来,并显示行号
  • 搜索特定字符串
    • grep -n 'the' filename
      • 搜索filename中 含有 the的行,并显示行号
    • grep -vn 'the' filename
      • 搜索filename中 不含 the的行,并显示行号
    • grep -in 'the' filename
      • 搜索filename中含有the的行,并显示行号, 不区别大小写
  • 搜索相似字符串
    • grep -n 't[ae]st' filename
      • 搜索含有tast 或者 test的行
    • grep -n '[^g]oo' filename
      • 搜索含有oo  oo前面 不含有 g的行
    • grep -n '[^a-z]oo' filename
      • 搜索含有oo  oo前面 不含有 小写字母的行
    • grep -n '[0-9]' filename
      • 搜索 含有数字 的行
  • 搜索行首行尾
    • grep -n '^the' filename
      • 搜索 行首 出现the的行
    • grep -n '^[a-z]' filename
      • 搜索 行首 是小写字母 的行
    • grep -n '^[^a-zA-Z]' filename
      • 搜索 行首 不是字母 的行
    • grep -n '\.$' filename
    •       搜.的行
    • grep -n '^$' filename
    •       搜索空行
    •       由此可以理解^代表行首之前,$代表行尾之后,^$即代表行首行尾间什么都没有,即空行
  • 任意一个字符.与任意个字符*
    • grep -n 'g..d' filename
      • 搜索有g??d模式的行,g..d有且仅有四个字符
    • grep -n 'ooo*' filename
      • 搜索有两个以上o的行,即前两个o一定存在,最后一个o*表示0到n个o, 千万注意这里的*与通配符里*的不同
    • grep -n 'g.*d' filename
      • 搜索有g开始,d结尾,中间任意个字符的字符串的行
  • 限定连续字符个数
    • grep -n 'o\{2\}' filename
      • 搜索含有两个o字符串的行
    • grep -n 'go\{2,5\}g' filename
      • 搜索含有开头g,结尾g,中间2到5个o的字符串的行
    • grep -n 'go\{2,\}g' filename
      • 搜索含有开头g,结尾g,中间2个以上o的字符串的行
  • 包含 stra 或者 strb: grep -E 'stra|strb' filename

2 sed

  • 增删换显
    • nl filename | sed '2,5d'
      • 列出filename每一行,并加行号,然后删除2到5行,
      • 删除第2行: '2d'
      • 删除第2行到最后一行: '2,$d'
    • nl filename | sed '2i this is a new line'
      • 在第2行后增加新行,内容是"this is new line"
    • nl filename | sed '2a this is new line one \ > this is new line two'
    • nl filename | sed '2,5c this is a replace line'
      • 将2到5行替换为"this is a replace line"
    • nl filename | sed -n '3,5p'
      • 打印3到5行

3 printf (原来还有这个命令)

  • printf '%s\t%s\t%s\n' $(cat filename)
  • printf '%10s %5i %8.2f\n' $(cat filename)

4 awk

awk '条件类型1{动作1} 条件类型2{动作2}' filename

  • cat filename | awk '{print $1 "\t" $3}'
    • 每一行都要处理,因此无条件类型,动作即为打印第1列,第3列,中间以Tab分隔
  • cat filename | awk '{print $1 "\t lines:" NR "\t columns:" NF}'
    • NR:行数,NF,列数
  • cat filename | awk 'BEGIN{FS=":"} $3 < 10 {print $1 "\t" $3}'
    • FS是指分割符,$3 < 10是条件,{}内是动作

5 文件对比

  • diff

转载于:https://www.cnblogs.com/Iambda/archive/2013/02/14/3933508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值