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)
上一篇 2017-09-08 17:36
下一篇 2017-09-09 08:53

相关推荐

  • awk用法指北

    awk用法指北 awk是对Linux系统中文本三剑客之一。其功能强大,支持条件判断、数组、循环,并且内置大量函数,近乎于一门独立的编程语言。 awk基本语法awk [option] ‘program’ FILE 最常用选项 -F “” 指定字段分隔符 //分隔符为PATTERN-v VAR=value 指定变量…

    Linux干货 2017-05-21
  • Linux基础命令 -管道密切配合使用 tee

    基础命令和管道密切配合使用  tee     基础命令:tee   tee命令 功能: 把命令1的STDOUT保存在文件名中,然后管道输入给命令2; 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 使用场景: 1.保存不同阶段的输出 2.复杂管道的故障排除 3.同时查看和记录…

    Linux干货 2016-08-03
  • N25-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。 1.  [root@jizo etc]# ls –d skel 2.  skel 3.  [root@jizo etc]# cd /home 4.  [root@jizo …

    Linux干货 2016-12-26
  • N22-网络班 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -r /etc/skel /home/tuser1 chmod -R go= /home/tuser1 2、编辑/etc/group文件,添加组hadoop。…

    Linux干货 2016-09-19
  • 实验:httpd

    虚拟主机 httpd-2.4示例步骤: 1. 进行规划虚拟主机 192.168.209.8:80,192.168.209.10:80 www.10linux.com,www.iounix.com /var/www/html/10linux,/var/www/html/iounix 2. ]# mkdir /var/www/html/{10linux,ioun…

    Linux干货 2017-06-04
  • MHA

    1.关于MHA MHA是一款开源的mysql的高可用程序,它为mysql主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其他从节点获取额外的信息来避免不一致性的问题。MHA还提供了master节点的在线切换…

    2016-11-26

评论列表(1条)

  • h
    h 2017-09-09 09:05

    非常细致的作业!