title: 文本处理及正则表达式
date: 2018-10-14 18:18:18
tags:
- VIM
- Find
- Sed
- 正则表达式
- shell脚本
文本处理及正则表达式
文件查看
文件查看命令:
cat,tac,rev
cat [OPTION]… [FILE]…
-E:显示行结束符$
-n:对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
tac
rev
文件查看
more: 分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本搜索文本
n/N跳到下一个或上一个匹配
less命令是man命令使用的分页器
显示文本前或后行内容*********************************************
head [OPTION]… [FILE]…
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#:指定行数
tail [OPTION]… [FILE]…
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:同上
-f: 跟踪显示文件fd新追加的内容,常用日志监控
相当于–follow=descriptor
-F: 跟踪文件名,相当于–follow=name --retry
tailf类似tail –f,当文件不增长时并不访问文件
###按列抽取文本cut和合并文件paste***************************************CUT
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
…#: 第#个字段
…#,#[,#]:离散的多个字段,例如1,3,6
…#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c按字符切割
–output-delimiter=STRING指定输出分隔符
cut和paste
显示文件或STDIN数据的指定列
cut-d:-f1/etc/passwd
cat /etc/passwd|cut-d:-f7
cut-c2-5/usr/share/dict/words
paste 合并两个文件同行号的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
示例:
paste f1 f2
paste -s f1 f2
收集文本统计数据wc*****************************************WC
计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
wcstory.txt
392371901story.txt
行数字数字节数
常用选项
-l只计数行数
-w只计数单词总数
-c只计数字节总数
-m只计数字符总数
-L显示文件中最长行的长度
文本排序sort
把整理过的文本显示在STDOUT,不改变原始文件
sort[options]file(s)
常用选项
-r执行反方向(由上至下)整理
-R随机排序
-n执行按数字大小整理
-f选项忽略(fold)字符串中的字符大小写
-u选项(独特,unique)删除输出中的重复行
-t c选项使用c做为字段界定符
-k X选项按照使用c字符分隔的X列来整理能够使用多次
uniq
uniq命令:从输入中删除前后相接的重复的行
uniq[OPTION]… [FILE]…
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq-c
比较文件
比较两个文件之间的区别
difffoo.conffoo2.conf
5c5
< use_widgets=no
.>use_widgets=yes
注明第5行有区别(改变)
取出IP地址的几种方法: *************************************(重点)
ifconfig | sed -r ‘2!d;s/.inet (addr:)?//;s/ .//’ 6和7通用的取出IP地址
ifconfig eth0 | head -2|tail -1| tr -dc '[0-9]. ’ |tr -s ’ ’ |cut -d" " -f2 6系统上
ifconfig eth0|sed -n ‘2p’|sed ‘s@.inet @@’|sed ‘s@ netmask.$@@’ 提取出7上的IP地址,其中@@为分隔符
ifconfig ens33|sed -nr '2s/.t (.) net./\1/gp’ 扩展的正则表达式取出IP,()为分组,只有一个括号,所以后面写1
ifconfig ens33|sed -nr '2s/(.t) (.)( net.)/\2/gp’ 扩展的正则表达式取出IP,()为分组,有三个括号,所以后面写2留第二个
ifconfig | sed -nr "s/.inet (.) netmask./\1/p" | head -n 1 取出7的IP
ifconfig | sed -nr "s/.inet (.) netmask.*/\1/p" 取出7的三个网卡IP
查询系统信息 ***********************************************重点
…#RED is content color
…#依次显示出
…#系统版本
…#内核版本
…#CPU型号
…#内存大小
…#最大磁盘利用率
…#hostname
…#IP地址
RED="\033[1;31m"
COLOREND="\033[0m"
echo -e “OS version is R E D ‘ c a t / e t c / c e n t o s − r e l e a s e ‘ RED`cat /etc/centos-release` RED‘cat/etc/centos−release‘COLOREND”
echo -e “kernel version R E D ‘ u n a m e − r ‘ RED`uname -r` RED‘uname−r‘COLOREND”
echo -e “The cpu type is KaTeX parse error: Double superscript at position 42: … name'|tr -s ' '̲|cut -d: -f2`COLOREND”
echo -e “The memory is KaTeX parse error: Double superscript at position 31: …ep Mem|tr -s ' '̲ ':' |cut -d: -…COLOREND”
echo -e “The max disk used is R E D ‘ d f ∣ g r e p / d e v / s d ∣ t r − s " " " : " ∣ c u t − d : − f 5 ∣ s o r t − n r ∣ h e a d − 1 ‘ RED`df |grep /dev/sd|tr -s " " ":"|cut -d: -f5|sort -nr|head -1` RE