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条)
非常细致的作业!