文本处理三剑客和正则表达式

          本片文章将会有以下内容

grep :文本过滤工具

sed  :文本流编辑工具

awk :文本报告生成器

 

正则表达式


由一类特殊字符及文本字符所编写的模式,这些字符不表示字面意义,而是表示控制或通配功能
分两类 :
基本正则表达式 BRE
扩展正则表达式 ERE

 

          grep文本过滤工具

grep支持基本正则表达式

egrep 支持扩展正则表达式

fgrep 不支持正则表达式

 

作用:根据用户指定的 “模式(过滤条件)”对目标文本逐行匹配检查,打印匹配到的行

模式:由正则表达式的元字符及文本字符所编写出的过滤条件

语法: grep [OPTIONS] PATTERN [FILE...]

    常用选项
      -v : 反过滤
      -i :不区分大小写
      -o :只显示匹配到的字符串
      -q :静默执行
      -A 2 显示匹配到的行下2行
      -B 2 上2行
      -C 2 上下各2行

 

            sed文本流编辑工具


 sed [OPTION]... 'script' [input-file]...

  常用选项


    -n 阻止默认全输出
    -e 指定多个地址定界编辑命令
    -f FILE (编写时每行一个编辑命令,当编辑命令过多时使用)
    -r 扩展正则表达式
    -i 编辑源文件

 

script :地址定界编辑命令

  地址定界

    1.空地址:
        对全文进行处理
    2.单地址:
        '*' : 指定行
        '/pattern/' 被模式匹配到的每一行
    3.地址范围
        '*,*' 指定的第几行和第几行
        '*,+*' 指定的行后下面第几行
    4,指定步长
        '*~*'

  编辑命令

    d: 删除
    p: 打印
    =: 打印行号
    !: 条件取反
    s///: 查找替换 g全局替换 p只显示替换成功的行
    a \text: 在行后追加text 支持\n 实现多行追加
    i \text: 在行前追加text 支持\n 实现多行追加
    c \text: 把匹配到的行替换为指定text
    w /file: 保存到指定的文件中 保存文件
    r /file: 将文件中的内容插入到匹配行后 文件合并

 

               awk 整理完补齐

 

 

                正则表达式


基本正则表达式元字符:


字符匹配
  . :匹配单个字符
    [ ] :匹配指定范围内的任意单个字符
    [^ ] : 匹配指定范围外的任意单个字符
    [[:digit:]] 所有的数字
    [[:lower:]] 所有小写字符
    [[:upper:]] 所有大写字符
    [[:alpha:]] 所有字符
    [[:alnum:]] 所有字符和数字
    [[:punct:]] 所有符号
    [[:space:]] 空白字符
    [[:blank:]] 空格和制表符


次数匹配
    * 匹配前面的字符匹配任意次
    \? 匹配前面的字符一次或零次
    \+ 匹配前面的字符至少一次
    \{m\} 匹配指定次数
    \{m,n\} 匹配至少m次至多n次
    \{0,n\} 匹配多n次
    \{n,0\} 匹配至少n次


位置锚定
    ^ 行首
    $ 行尾
    \< 词首锚定
    \> 词尾锚定


分组
    \(ha\)* 如果不加 \( \)则*只会对a匹配任意次

    分组括号中的字符会被正则表达式引擎自动记录于内部变量中
    \1 第一个括号匹配到的内容
    \2 第二个括号匹配到的内容
.....
示例
    有一个文件 他的内容如下
HE loves hls love
HE likes hls love
she likes her liker
she loves her liker

    使用 l..e作为模式会匹配全部的内容
cat love.txt | grep "l..e"
HE loves hls love
HE likes hls love
she likes her liker
she loves her liker

    这里使用后向应用:引用前面分组括号中匹配到的字符

cat love.txt | grep "\(l..e\).*\1"
HE loves hls love
she likes her liker



    a|b a或者b
    C|cat C或者cat
    (C|c)at Cat或者cat

 

扩展正则表达式在使用一些元字符时可以不用转义 ( ? + {} () | )

也有人这样理解

“基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已。(对,就是这么简单)”

BRE:只有^$.[]* 是元字符

ERE:^$.[]*+(){}?|都是元字符


                  文本查看及处理工具

wc: 统计文件的行数、单词数、字符数
  wc [OPTIONS] FILE...
常用选项
    -l 仅显示行数
    -w 仅显示单词数
    -c 仅显示字节数

 

cut 显示特定字段
  cut OPTIONS.. [FILE]
常用选项
    -d 'CHAR' 以制定字符为分隔符
    -f FILEDS 显示特定字段
      1 : 指定单个字段
      1-5 : 连续多个字段
      2,4 : 指定字段

 

 

 

sort 排序
  sort [OPTIONS]... [FILE]...
常用选项
    -t 指定分隔符
    -k * 用于排序比较的字段
    -n 根据数值大小进行排序
    -r 逆序排序
    -f 忽略字符大小写
    -u 重复的行只保留一份

 

uniq 报告或移除重复的行
  uniq [OPTIONS]
常用选项
    -c 统计每一行重复出现的次数
    -u 仅显示未重复行
    -d 仅显示重复过的行


diff 生成补丁

  diff FILE1 FILE2 > PATH.FILE
常用选项
  -u 显示要求改的上下文 默认3行

 

patch 向文件打补丁

  patch -i PATH.FILE OLDFILE

  patch OLDFILE < PATH.FILE

posted @ 2020-06-05 20:41  蠢狐狸  阅读(175)  评论(0编辑  收藏  举报