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条)

  • h
    h 2017-09-09 09:05

    非常细致的作业!

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code