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

相关推荐

  • nginx配置(三)

    ngx_http_upstream_module模块     #分流The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass, uwsgi_pa…

    Linux干货 2017-05-08
  • llinux常用命令及bash基本特性

    一、常用的文件和目录管理命令 1. pwd命令:用来显示当前的工作目录 语法格式:直接输入pwd回车显示当前的工作目录 示例:用pwd命令显示当前的工作目录 [root@suyiwen ~]# pwd /root 2. mkdir命令:用来创建目录文件 语法格式:mkdir [OPTION]… DIRECTORY…常用option: -m,用来指定目录的权限…

    Linux干货 2018-03-11
  • 8-10 bash变量浅谈

    8-10 作业 一、脚本 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 3、编写脚本/root/bin/disk.…

    Linux干货 2016-08-15
  • http协议

    Web Service概述 web服务时一种应用程序的服务,它所提供的最主要的信息是一种超文本标记语言(HTML)、多媒体资源(如:视频、图片、音乐等)。HTML是一种纯文字的文本信息,通过所谓的标签来规范所要显示的内容格式,在客户端通过浏览器的形式对HTML及多媒体资源进行解析,然后呈现在终端上。主要由http和https协议实现 http协议概述 HTT…

    Linux干货 2016-10-28
  • 第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;        (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [ro…

    2017-04-05
  • drbd+corosync+pacemaker

    存储分类: DAS:直接附加存储;例如ide,sata,scsi,sas等 NAS:网络附加存储;即文件级别共享存储;例如nfs等 SAN:存储区域网络;即块级别共享存储;例如ip-san,fc-san   共享存储选型比较: SAN性能优良,价格昂贵; NAS性能基于文件系统级别,性能低下; 因此,另一个DRBD诞生,全称为分布式复制块设备,Di…

    Linux干货 2017-11-13

评论列表(1条)

  • h
    h 2017-09-09 09:05

    非常细致的作业!