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

一、文本工具

    在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

相关推荐

  • PXE实践

    本篇只以记录个人部署pxe过程中所遇问题,至于原理,只做部分简单说明。 pxe部署必要软件: syslinux (用于提供引导中所必备文件) tftp(用于提供存放vmlinuz,initrd,syslinux.0等引导类文件) dhcp(用于自动获取IP包括指明去哪个主机获取syslinux.0文件) 最后还需要一个web或者ftp服务,已提供系统安装中所…

    Linux干货 2017-02-05
  • Linux 下openssl搭建一个CA

    CA : 证书颁发机构PKI : 公钥基础设施,公钥基础构架证书: 里面存放了用户的各种信息,最核心的部分就是公钥 谁来给CA颁发公钥,解决方法是,CA自己给自己颁发公钥 openssl 是一个强大的工具可以帮助我们来创建颁发证书,下面我们就来看下在linux下 opensssl 搭建一个CA,并实现管理 1、首先我们需要给CA生成一个私钥  cd…

    2017-07-16
  • 进程管理

    一、进程概述 1、进程的概念        用户通过执行命令,将程序提起到内存中运行,运行中的程序即称为进程。内核为了方便管理,根据内核发起者的权限、属性等参数,为每个进程设置一个独立的PID号,通过PID号来判断进程的权限。 2、进程的分类:    &nbs…

    Linux干货 2016-09-07
  • 0805作业

    课堂练习 1.找出ifconfig 命令结果中本机的所有IPv4 地址   ifconfig|tr -cs '[0-9].' '\n'|sort -ut '.' -k3 2.查出分区空间使用率的最大百分比值   df|tr -s ' '|cut -d&quot…

    Linux干货 2016-08-07
  • jenkins+gitlab构建安卓自动编译环境

        因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。    gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装…

    Linux干货 2016-07-16
  • LVS入门

    随着互联网进入寻常百姓家,网络流量愈来愈大,大规模的网路访问如果都使用一个服务器提供服务,那么网络通讯注定会拥堵不堪。为了解决这些问题,达到使网络流量均衡地分散到各个服务器上的目的,一些技术大牛发明了LVS负载均衡技术。   LVS简介   LVS(Linux Virtual Server)即为Linux虚拟服务器,使由章文嵩博士主导开发…

    Linux干货 2017-05-09