linux文本处理工具篇
一、常用简单工具
cat [OPTION]... [FILE]...
- -E:显示行的结束符$
- -n:对显示出的每一行进行编号。
- -A:显示所有控制符
- -s:压缩连续空行为一行
more:分页查看文件
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器
文本切割cut [OPTION]... [FILE]...
- -f:取第几个字段
- -c:按字符切割
- -d:指定切割符,默认为tab
wc文本数据统计
- -l:只计算行数
- -w:world,只计算单词的总数
- -c:只计算字节总数
- -m:只是计算字符总数
- -L:显示文件中最长行的长度
sort,文本排序
- -r:倒序输出
- -R:随机排序
- -n:执行按照数字大小整理
- -f:选项忽略(fold)字符串中的字符大小写
- -u:删除输出中的重复行
- -t c使用c作为字段的界定符
- -k X选项按照使用c字段分割的X列来整理能使用多次
uniq统计工具
- -c:显示每行重复出现的次数
- -d:仅显示重复的行
- -u:显示不重复的行
- 常和sort 命令一起配合使用: sort userlist.txt | uniq -c
grep文本过滤
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
grep [OPTIONS] PATTERN [FILE...]
- -m #:匹配到#次后停止
- -v:显示不被pattern匹配到的行
- -i:忽略大小写
- -c:统计匹配到的行数
- -o:仅显示匹配到的行
- -q:静默模式,不输出任何信息
- -A #:after后#hang
- -B #:before,前#行
- -C #:context,前后各#行
- -e:现实多个选项间的或关系grep –e ‘cat ’ -e ‘dog’ file
- -w: 匹配整个单词
- -E :使用ERE
- -F :相当于fgrep,不支持正则表达式
- -f :file 根据模式文件处理
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep,sed,awk,vim, less,nginx,varnish等
分两类:基本正则表达式:BRE,扩展正则表达式:ERE
基本正则表达式元字符
- . 匹配任意单个字符
- [] 匹配指定特定范围内任意单个字符,式列:[li] [wang] [0-9]
- [^] 匹配指定范围外的任意单个字符
- [:alnum:]字符和字母
- [:alpha:]代表任何英文大小写字符,a-z,A-Z
- [:lower:]小写字母[:upper:] 大写字母
- [:blank:] 空白字符,空格,制表符等
- [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)
- [:cntrl:] 不可打印的控制字符(退格、删除、警铃...
- [:digit:] 十进制数字 [:xdigit:]十六进制数字
- [:graph:]可打印的非空白字符
- [:print:]可打印字符
- [:punct:]标点符号
- * 匹配前面的字符任意次,包括0次贪婪模式:尽可能长的匹配
- .* 任意长度的任意字符
- \? 匹配其前面的字符0或1次
- \+ 匹配其前面的字符至少1次
- \{n\} 匹配前面的字符n次
- \{m,n\} 匹配前面的字符至少m次,至多n次
- \{,n\} 匹配前面的字符至多n次
- \{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
- ^ 行首锚定,用于模式的最左侧
- $ 行尾锚定,用于模式的最右侧
- ^PATTERN$ 用于模式匹配整行
- ^$ 空行
- ^[[:space:]]*$ 空白行
- \< 或 \b 词首锚定,用于单词模式的左侧
- \> 或 \b 词尾锚定,用于单词模式的右侧
- \<pattern\> 匹配整个单词
分组和引用
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例: \(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat