文本处理工具

Linux上文本三剑客分别是grep、sed和awk。grep是文本过滤工具(egrep,fgrep);sed是文本编辑工具;awk是文本报告生成器。

正则表达式,由一类特殊字符及文本所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;分别为基本正则表达式(BRE)和扩展正则表达式(ERE)。

grep

Global search Regular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式(过滤操作)”对目标文本逐行进行匹配检查;打印匹配到的行。

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

  • grep

    • 用法:

      • grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    • 参数:

      • --color = auto:对匹配到的文本着色后高亮显示

      • -i:ignorance,忽略字符的大小写

      • -o:仅显示搜索到的字符串本身

      • -v,--invert-match:显示不能被匹配到的行

      • -E:支持使用扩展到正则表达式元字符

      • -q,--quiet,--silent:

      • -A#:after,显示查找目标文本的后#行

      • -B#:before,显示查找目标文本的前#行

      • -C#:context,显示查找目标文本的前后#行

egrep

支持扩展的正则表达式实现类似于grep文本过滤功能;相当于grep -E

fgrep

不支持正则表达式元字符,当无需用到元字符去编写模式时,使用fgrep必能更好

基本正则表达式元字符

基本正则表达元字符分为字符匹配匹配次数位置锚定分组及引用

  • 字符匹配:

    • .:匹配单个字符

       [root@cui ~]# grep "r..t" /etc/passwd
       root:x:0:0:root:/root:/bin/bash
       operator:x:11:0:operator:/root:/sbin/nologin
       ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin   # r/ft
    • []:匹配指定范围内的任意单个字符

    • [^]:匹配指定范围外的任意单个字符

      • [:upper:]:所有大写字母

      • [:lower:]:所有小写字母

      • [:alpha:]:所有字母

      • [:digit:]:所有数字

      • [:alnum:]:所有的字母和数字

      • [:space:]:所有空白字符

      • [:punct:]:所有标点符号

       ## 匹配两个字母
       [root@cui ~]# grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd
       root:x:0:0:root:/root:/bin/bash
       operator:x:11:0:operator:/root:/sbin/nologin
       [root@cui ~]# 
  • 匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数

    • *:匹配其前面的字符任意次

    • .*:匹配任意长度的任意字符

    • \?:匹配其前面的字符0次或1次;即前面的字符是可有可无的

    • \+:匹配其前面的字符1次或多次l;即前面的字符至少出现一次

    • \{m\}:匹配其前面的字符m次

    • \{m,n\}:匹配前面的字符至少m次,至多n次

      • \{0,n\}:至多n次

      • \{m,\}:至少m次

  • 位置锚定:

    • ^:行首锚定;用于模式的最左侧

    • $:行尾锚定;用于模式的最右侧

    • ^PATTERN$:用PASTTERN来匹配整行

      • ^$:空白行;不能出现字符

      • ^[[:space:]]$:空白或包括空白字符的行

    • 单词:非特殊字符组成的连续字符(字符串)都称为单词

      • \<或\b:词首锚定,用于单词的左侧

      • \>或\b:词尾锚定,用于单词模式的右侧;

      • \<PATTERN\>:匹配完整的单词

  • 分组及引用

    • \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理

       [root@cui ~]# grep "\(ab\)" cui.txt 
       aaab
       aaab
       adddbaababaaab
    • Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

      • \1:模式从左侧起,第一个左括号以及之匹配的右括号之间的模式所匹配的字符;

      • \2:模式从左侧起,第二个左括号以及之匹配的右括号之间的模式所匹配的字符;

      • \3:模式从左侧起,第三个左括号以及之匹配的右括号之间的模式所匹配的字符;

      • ...

         [root@cui ~]# grep "l..e.*l..e" cui.txt 
         he loves his lover
         he likes his lover
         She likes her liker
         She loves her liker
         [root@cui ~]# grep "\(l..e\).*\1" cui.txt 
         he loves his lover
         She likes her liker

文本查看及处理工具

wc、cut、sort、uniq、diff、patch

  • wc:word count(单词统计)

    • 用法:

      • wc [OPTION]... [FILE]...

      • wc [OPTION]... --files0-from=F

    • 参数:

      • -l:lines,仅显示行数

      • -w:words,仅显示行数

      • -c:bytes,仅显示字节数

  • cut:文本截取工具

    cut 命令 用来显示行中的指定部分,删除文件中指定字段

    • 用法:

      • cut OPTION... [FILE]...

    • 参数:

      • -d, --delimiter=DELIM:仅显示行中指定直接范围的内容

      • -f, --fields=LIST:挑选出的字段

        • #:单个字段

        • #-#:连续的多个字段

        • #,#:离散的多个字段

      • -complement:补足被选择的字节、字符或字段;

    • 实例:

       [root@cui ~]# cat 1.txt 
       No Name Mark Percent
       01 tom 69 91
       02 jack 71 87
       03 alex 68 98
       ​
       No,Name,Mark,Percent 0000
       04,tommm,693,9155 0001
       05,jackkk,714,8755 002
       06,alexxx,685,9855 003

      显示以空格为分隔符的第2个字段

       [root@cui ~]# cut -d\  -f 2 1.txt 
       Name
       tom
       jack
       alex
       ​
       0000
       0001
       002
       003

      显示以空格为分隔符的第2-3列的字段

       [root@cui ~]# cut -d\  -f 2-3 1.txt 
       Name Mark
       tom 69
       jack 71
       alex 68
       ​
       0000
       0001 
       002
       003

      显示以“,”为分隔符的第2,3,4列 的字段

       [root@cui ~]# cut -d,  -f 2,3,4 1.txt 
       No Name Mark Percent
       01 tom 69 91
       02 jack 71 87
       03 alex 68 98
       ​
       Name,Mark,Percent 0000
       tommm,693,9155 0001 
       jackkk,714,8755 002
       alexxx,685,9855 003

      显示除第2,3,4列的的字段

       [root@cui ~]# cut -d,  -f 2,3,4  --complement 1.txt 
       No Name Mark Percent
       01 tom 69 91
       02 jack 71 87
       03 alex 68 98
       ​
       No
       04
       05
       06
  • sort:对文本文件中所有行进行排序。

    • 用法:

      • sort [OPTION]... [FILE]...

    • 参数

      • -n, --numeric-sort:根据数字排序

      • -t, --field-separator=SEP:使用SEP作为列的分隔符。

      • -k, --key=KEYDEF:通过一个key排序;KEYDEF给出位置和类型

      • -r, --reverse:将结果倒序排列

      • -f, --ignore-case:忽略大小写

      • --u, --unique:同时使用-c,严格检查排序;不同时使用-c,输出排序后去重的结

  • uniq:显示或忽略重复的行。

    • 用法:

      •  uniq [OPTION]... [INPUT [OUTPUT]]
    • 参数:

      • -c, --count:在每行开头增加重复次数

      • -u, --unique:仅显示未曾重复的行

      • -d, --repeated:显示重复过的行

  • diff:比较给定的两个文件的不同

    • 用法:

      • diff(选项)(参数) 文件1 文件2

    • 参数:

      • -u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;

    • 生成补丁

      •  
        
        [root@cui ~]# diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE
  • patch:为开放源代码软件安装补丁程序

    patch命令 被用于为开放源代码软件安装补丁程序。让用户利用设置修补文件的方式,修改,更新原始文件。如果一次仅修改一个文件,可直接在命令列中下达指令依序执行

    • 打补丁:

      •  path [OPTIONS] -i  补丁文件 目标文件
      •  path  目标文件 <  补丁文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值