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

一、文本工具

    在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