Linux文本处理工具

Linux文本处理工具

文件内容查看的工具:cat tac rev

cat [options] [filename]
    -E //显示行结束符
    -n //对显示出的行编号
    -A //显示所有控制符
    -b //非空行编号
    -S //压缩连续的空行为一行

tac //用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示
rev //rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输
        出,最后一个字符最先输出

分页查看文本内容: more less

more是基于vi编辑器的文本过滤器,less的功能和more差不多,使用less或more显示时,有相同的功能键:
– 按Space键:显示文本的下一屏内容
– 按Enier键:只显示文本的下一行内容
– 按H键:显示帮助屏,该屏上有相关的帮助信息
– 按B键:显示上一屏内容
– 按Q键:退出more命令

more -n //指定每屏显示n行 
     -d //显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]” 
     -c //不进行滚屏操作每次刷新这个屏幕 
     -s //将多个空行压缩成一行显示 
     -u //禁止下划线 
     +n //从指定数字n的行开始显示

less -e //文件内容显示完毕后,自动退出 
     -f //强制显示文件 
     -g //不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度 
     -l //搜索时忽略大小写的差异 
     -N //每一行行首显示行号 
     -s //将连续多个空行压缩成一行显示 
     -S //在单行显示较长的内容,而不换行显示

显示文本前或后行内容

head [options] [filename]
        用于显示文件开头的内容,默认显示10行
     -n //显示文件开头n行
     -c n //显示文件开头内容n个字符

tail [options] [filename]
        用于显示文件末尾的内容,默认显示10行
     -c n //显示文件末尾n个字符
     -n //显示文件末尾n行
     -f //跟踪显示文件追加的内容,常用作日志监控

文本抽取工具

cut 用来显示行中制定部分,删除指定字段
     -b //仅显示行中制定范围字符           
     -d //指定字段分隔符
     -f //显示制定字段内容和-d组合使用
        如cut -d: -f7 //表示以冒号为分隔符,取第七列的字段
     -c //显示指定范围的字符,用法:
        cut -c-5 filename //显示文件中每行的前五个字符
        cut -c5- filename //显示文件中每行从第五个字符开始到最后的字符

分析文本

sort 文本排序工具           
     -t //分隔符
     -k //以分隔符的第几列排序
     -n //以数字方式排序
     -r //倒序排列
     -u //去除重复项
     -f //忽略大小写        

wc 文本统计工具
    默认显示显示行数 单词数 及 字节数
     -l //显示行数
     -w //显示单词数
     -c //显示字节数
     -m //显示字符数

文本去重工具

uniq 去除连续的重复行,仅保留一行
     -u //去除连续的重复行,不保留
     -d //仅显示重复的行,去除不重复的行
     -c //显示的结果前显示重复的次数

Linux文本处理三剑客   grep sed awk

grep(global search regular expression(RE)and print out the line,全局搜索正则表达式(re)并打印出该行),
它是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

  • 选项
grep --color=auto //关键字高亮显示
     -v //反选
     -n //显示行号
     -c //显示匹配行的数量
     -i //忽略大小写
     -q //静默输出,即什么也不输出
     -A n //显示关键字及其下n行
     -B n //显示关键字及其上n行
     -C n //显示关键字及其上下n行
     -e //实现多个选项间的逻辑or关系
     -w //匹配整个单词
     -E 或 egrep //使用扩展正则
     -F 或 fgrep //不使用正则

sed是一种流编辑器,它是文本处理中非常中的工具,能够配合正则表达式使用


  • 命令格式
sed [options] 'command' file(s) 
sed [options] -f scriptfile file(s)
  • 命令选项
sed -i 更改原文件
    -i.bak 在更改前将原文件备份为.bak
    -n 不打印
    -e 多模式
    -f sed.txt 指定scripts的文件
    -r 指定扩展正则
    sed命令
    p打印
    d删除
    a在指定行后增加
    i在指定行前增加
    c替换指定行
    w将模式空间的行写入指定文件
    r将文件中的内容读入模式空间
    =: 为模式空间中的行打印行号
    !:模式空间中匹配行取反处理
  • 高级用法
seq 9 |sed 'n;d' 打印奇数行
seq 9 |sed -n 'n;p' 打印偶数行
seq 9 |sed '1!G;h;$!d'  倒序显示 或 seq 9 |sed -n '1!G;h;$p'
seq 9 |sed 'N;D' 显示最后一行 或 seq 9 |sed '$!d'
seq 9 |sed '$!N;$!D'  显示最后两行
seq 9 |sed 'G' 每一行后加一个空行
seq 9 |sed 'g' 原有的行全替换为空行
seq 9 |sed '/^$/d;G' 使每一行后有一个空行

awk 是一种更具灵活性的编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等功能,是linux/unix下的一个强大编程工具。它可以在命令行中使用,但更多是作为脚本来使用。


  • 命令格式
awk [options] 'script' var=value file(s) 
awk [options] -f scriptfile var=value file(s)
  • 选项
-F fs   fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: 
-v var=value   赋值一个用户定义变量,将外部变量传递给awk 
-f scripfile  从脚本文件中读取awk命令 
-m[fr] val   对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
  • 模式

    模式可以是以下任意一个:

- /正则表达式/:使用通配符的扩展集。 - 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。- 模式匹配表达式:用运算符~(匹配)和~!(不匹配)。 - BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
  • 操作

    操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:

- 变量或数组赋值 - 输出命令 - 内置函数 - 控制流语句
  • awk内置变量
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 $0 这个变量包含执行过程中当前行的文本内容。 [N] ARGC 命令行参数的数目。 [G] ARGIND 命令行中当前文件的位置(从0开始算)。 [N] ARGV 包含命令行参数的数组。 [G] CONVFMT 数字转换格式(默认值为%.6g)。 [P] ENVIRON 环境变量关联数组。 [N] ERRNO 最后一个系统错误的描述。 [G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。 [A] FILENAME 当前输入文件的名。 [P] FNR 同NR,但相对于当前文件。 [A] FS 字段分隔符(默认是任何空格)。 [G] IGNORECASE 如果为真,则进行忽略大小写的匹配。 [A] NF 表示字段数,在执行过程中对应于当前的字段数。 [A] NR 表示记录数,在执行过程中对应于当前的行号。 [A] OFMT 数字的输出格式(默认值是%.6g)。 [A] OFS 输出字段分隔符(默认值是一个空格)。 [A] ORS 输出记录分隔符(默认值是一个换行符)。 [A] RS 记录分隔符(默认是一个换行符)。 [N] RSTART 由match函数所匹配的字符串的第一个位置。 [N] RLENGTH 由match函数所匹配的字符串的长度。 [N] SUBSEP 数组下标分隔符(默认值是34)。

以上三种文本处理工具都支持使用正则表达式


  • 元字符集

字符匹配

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
.* 匹配任意长度的任意字符 
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
[:alnum:] 字母和数字 
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z 
[:lower:] 小写字母  [:upper:] 大写字母 
[:blank:] 空白字符(空格和制表符) 
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) 
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...) 
[:digit:] 十进制数字[:xdigit:]十六进制数字 
[:graph:] 可打印的非空白字符 
[:print:] 可打印字符 
[:punct:] 标点符号

次数匹配

\? 匹配其前面的字符0或1次 
\+ 匹配其前面的字符至少1次 
\{n\} 匹配前面的字符n次 
\{m,n\} 匹配前面的字符至少m次,至多n次 
\{,n\} 匹配前面的字符至多n次 
\{n,\} 匹配前面的字符至少n次

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

(1)
KX_ilKX_il
上一篇 2017-09-08 17:36
下一篇 2017-09-09 08:53

相关推荐

  • Centos系统启动概括流程

    §·Centos系统启动概括流程 系统启动流程: PC (OS Llinux) POST(开机)–>BIOS–>MBR(bootloader .446字节)—>kernel–>/sbin/init(/etc/inittab)(用户空间的管理进程)   备注: POST :加电自…

    Linux干货 2016-09-08
  • LAMP+NFS实现双web服务负载均衡

        一、实验拓扑          二、系统环境      1、主机A、主机B、主机C:CentOS 6.5        测试PC:         Windows 7 旗舰…

    Linux干货 2015-07-06
  • lvs的四种调度类型和调度算法介绍

    lvs是linux内核级的负载均衡解决方案,作为netfilter的补充套件,其工作在INPUT hook上。 相比nginx等负载均衡解决方案的差异如下: lvs工作于内核空间,不受用户空间套接字和端口数量的限制,而且所有调度工作在内核空间完成,效率更高; nginx为七层负载均衡器,虽然通过stream模块也可以做到四层负载均衡,但是受到套接字数量限制,…

    Linux干货 2017-06-25
  • rsyslog日志存储到mysql数据库中并利用loganalyzer进行web图形化分析管理

    概述     系统日志的重要性,相信大家都深有体会,当发生故障后,第一时间就是查看相关报错信息和日志信息,以定位问题所在,还可以基于日志,进行日志的分析,从而获取系统运行状态的一些规律,本篇就介绍关于系统日志的先关内容,具体分为:     1、rsyslog相关概念的介绍 &nb…

    Linux干货 2016-10-18
  • Linux文件查找及压缩常用知识总结

    一、文件查找 1.locate命令: locate KEYWORD 常用选项:     -i 执行区分大小写的搜索     -n  N只列举前N个匹配项目 查询系统上预建的文件索引数据库在:/var/lib/mlocate/mlocate.…

    Linux干货 2016-08-18
  • 马哥教育30期学员开学典礼

         早上背上书包去学校报到,很有一番学生时期去新学校的感觉,既兴奋又紧张,一段新的人生历程即将开始。      大学时曾经劝说我的同学别逃选修课,我说也许你苦学四年的专业比不上一节选修课对你的将来更有用,如今我却用亲身经历验证了这句话,我是通过大学的一堂选修课了解的Linux系统,开源软件,没想到多年后今天的我竟然也要入这行了。       到教室后,…

    2018-03-26

评论列表(1条)

  • h
    h 2017-09-09 09:05

    非常细致的作业!