简单的文本处理工具和正则表达式

一、文本工具

    在linux中,有很多优秀且功能强大的文本处理工具,对文件内容进行查找、替换、删除、排序等操作,是linux进行文本处理变得特别方便。日常工作中,经常会用文本处理进行日志分析,文本抽取等,所以掌握文本处理,将会对我们的工作起到极大的作用。

cat:查看文件

    cat [OPTION]…[FILE]…

    -n 显示每行编号

blob.png

    -E 显示行结束符

blob.png

    -A 显示所有控制符

blob.png

    -b 显示非空行编号

blob.png

    -s 压缩连续的空行成一行

more:分页查看文件

    more [OPTION…] FILE…

    -d 显示翻页和退出的提示

less:逐页查看文件或用STDIN输出

    查看时常用的快捷键

    /文本    搜索

    n/N     跳到上一个或下一个匹配的文本

    (man命令使用less分页器)

head:查看前文档的前十行内容

    -c #  指定获取前#个字节

blob.png

    -[n] # 获取指定的前n行

blob.png

cut 抽取文本

    cut [OPTION]…[FILE]…

    -d DELIMITER 指定分隔符,默认下tab

     -f 跟踪显示文件按新追加的内容,常用于日志文件的监控

    # 第#个字段

    #,#[,#…] 显示离散的多个字段

    #-# 显示连续的多个字段

    可以混合使用:#-#,#:例如1-3,5

    -c 按照字符切割

    –out-delimiter=STRING 指定输出分隔符

paste多个文件同行合并

    paste [OPTION]…[FILE]…

blob.png

    -d 指定分隔符

    -s 把所有的行合成一行显示

blob.png

wc:收集文本统计数据

    wc DIR 显示顺序为,行数、字数、字符数、文件名。

    -l 仅显示行数

    -w 仅显示单词总数

    -c 仅显示字数

    -m 仅显示数字符总数

sort:文本排序

    sort [OPTION] FILE(s) 在不改变原文件的情况下,把原文件中的内容显示在STDOUT

    -r 反向整理

    -n 按数字大小整理

    -f 忽略字符串大小写

    -u uniqe删除重复的行

    -t 使用指定的字段界定符,默认tab

uniq:从输入中删除连续重复的行

    -c 仅显示每行重复出现的次数

blob.png

    -d 仅显示重复过的行

    -u 显示不曾重复的行

    经常和sort一起使用

diff DIR1 DIR2:比较两个文件之间的差别,命令输出被保存到一个补丁文件中,使用-u选项可以输出diff格式的文件,适用于补丁文件。

patch:复制在其他文件中进行的改变

    -b 自动备份改变的文件

    

文件备份示例:

    $ diff -u f1 f2 > f.patch 

    $ patch -b f1 f2

grep:根据指定的模式对目标文件匹配过滤,打印想要的内容

    grep [OPTIONS] PATTERN [FILE…]

    –color=auto 对匹配到的文本着色显示,CentOS7默认执行

    -v 过滤掉匹配到的行,显示其他行

    -i 忽略字符的大小写

blob.png

    -n 显示匹配到的行号

blob.png

    -c 统计匹配的行数

blob.png

    -o 仅显示匹配到的字符串

    -q 不显示任何内容

    -A # 显示匹配到的后#行

blob.png

    -B # 显示匹配到的前#行

    -C # 显示匹配到的先后#行

    -e 实现多个选项之间的逻辑or关系

blob.png

    -w 整行匹配整个单词

    -E 使用ERE扩展正则表达式

sed:Stream EDitor,行编辑器

    sed是一种流编辑器,每次只处理一行内容,把当前处理的行存储在临时文件缓冲区中,称为“模式空间(pattern space)”,然后用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,知道文件末尾。文件内容没有任何改变。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

sed [OPTION]… 'script' inputfile…

常用选项:

    -n    不输出模式空间内容的自动打印

    -e    多点编辑

    -f /PATH/TO/SCRIPT_FILE    从指定文件读取脚本

    -r    支持使用扩展正则表达式

    -i    更改原文件(谨慎使用)

地址定界规则:

    (1)没有地址时,默认对全文处理

    (2)单行地址

        #    指定的行

        /PATTERN/    能被此模式匹配到的每一行

    (3)地址范围

        #,#    中间的所有行

        #,+#    指定行向下的几行

        /PART1/,/PAER2/

        #,/PART1/

    (4)~步进

        1~2 表示奇数行

        2~2 表示偶数行

编辑命令:

    d    删除模式空间匹配的行

    p    显示模式空间中的内容

    a\text    在匹配的行后面追加文本,支持/n实现多行追加

    i\text    在匹配到的行前面插入文本,支持使用\n实习那多行插入

    c\text    替换匹配到的单行或多行文本

    w /PATH/TO/FILE    保存模式匹配到的行到文件中

    r /PATH/TO/FILE    读取指定文件的文本至模式空间中匹配到的行后面

    =    为模式空间中的行打印行号

     !    模式空间中匹配到的行取反处理

    s///    查找并替换,可以使用其他分隔符,如s@@@,$$$

        g    行内全局替换

        p    显示成功替换的行

        w /PATH/TO/FILE    将替换成功的行保存至文件中

二、正则表达式

    正则表达式:有一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不再表示本身的字面意义,而是表示控制或通配的功能。Linux中,很多程序支持正则表达式,正则表达式一般分为,基本正则表达式和扩展正则表达式。

正则表达式元字符

blob.png

blob.png

位置锚定

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

    &:行尾锚定,用于模式的最右侧

    ^PATTERN$:匹配整行

        ^&:表示空行

        ^[[space:]]:表示空白行

    \<:词首锚定,用于单词模式的左侧

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

    \<PATTERN>\:匹配整个单词

分组匹配:

    \(PATTERN\)可以将一个或多个字符捆绑在一起,当作一个整体进行处理。分组括号中的模式匹配到的内容会被正则表达式引擎记录内部的变量中,这些变量的命名方式为:\1,\2,,…可以用来引用括号中模式所匹配到的字符。其中,\1表示从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。

    

    

    

    

原创文章,作者:zhanghuanyu,如若转载,请注明出处:http://www.178linux.com/30939

(0)
zhanghuanyuzhanghuanyu
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • 关于find命令的实际应用

    1、查找/var目录下属主为root,且属组为mail的所有文件 2、查找/var目录下不属于root、lp、gdm的所有文件 3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 5、查找/etc目录下大于1M且类型为普通文件的所有文件 6、查找/e…

    Linux干货 2016-08-16
  • bash脚本之进阶

    bash脚本 1、终端打印 1、单双引号(echo) 双引号: ①在双引号里面打不出! ②双引号,可以在文本中使用“;”,“;”在bash中被用作命令定界符。 单引号: 变量替换在单引号中无效。 2、printf:不会自动添加换行符,要手动添加 如下: 结果: 3、补充: echo 要使用转义系列需要加e,!号除外 2、变量和环境变量 脚本语言通常…

    Linux干货 2016-11-28
  • vrrp_script高可用httpd&双主httpd

      vrrp_script高可用httpd 实验拓扑: HA01 192.168.150.137     MASTER HA02 192.168.150.137     BACKUP VIP 1921.168.150.131 实验1: 通过touch一个文件来控制keepalived主机的优先级 HA01的配…

    Linux干货 2016-12-06
  • Iptables基础

       Firewall:防火墙,工作于主机或网络的边缘处,对于进出本主机或网络的报文根据事先定义好的检查规则左匹配检测,对于能够被规则所匹配到的报文进行相应的处理的组件。   防火墙可分为:硬件防火墙,在硬件级别实现部分功能的防火墙;软件防火墙,应用软件处理逻辑运行于通用硬件平台之上的防火墙;主机防火墙,服务范围为当前主机;网络…

    2017-06-19
  • 用户管理、组管理、权限管理、文本处理工具应用示例

    用户管理、组管理、权限管理、文本处理工具应用示例 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 [root@localhost ~]# cp -a /etc/skel/ /home/tuser1/ [root@localhost ~]# chmod -R go= /hom…

    Linux干货 2017-07-23
  • 我的第一篇博客

        第二天,很早的来到,不知道做些什么,未来也l许很忙碌,希望能够一直坚持,不管是难吃的饭菜,还是不良的作息,起码做个对得起这四个半月的人吧…

    Linux干货 2017-07-11