文本处理cut、sort、uniq、paste正则表达式

1 cut 按列抽取文本

cut -d DELIMITER -f FILEDS .example,cut -d: -f1,用-d:冒号位分割符,用f1取第一列。

[root@cenots7 ~]#cut /etc/passwd -d: -f 7
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin

1.2 paste -d : f1 f2 两个文件行号对齐,-d指定分隔符,并排。

1.3 sort 排序

sort -r 反序。sort -R 随机。sort -n 按数字大小排序。sort -f 忽略字符串大小写。sort -u 删除重复行。
综合用法:sort -t: -k3 -n passwd -t:指定冒号分隔符,-k3按照第三列排序,-n按照数字大小来排序。

//系统生成12位包含大小写,数字下划线的随机密码
__cat /dev/urandom |tr -dc "a-zA-Z_0-9"|head -c 12__

1.4 uniq 从输入删除前后相接的重复的行

1.4.1 uniq -c 显示行重复出现的次数
uniq -d 仅显示重复的行
uniq -u 仅显示不重复的行
//一般sort list.txt |uniq -c 先排序,然后统计重复的行是次数

2 grep 命令

2.1 grep -m 匹配m次后停止。grep -v 显示不被匹配的行。grep -i 忽略大小写。grep -n 显示匹配的原行号。grep -c 统计匹配的行数。grep -o 仅显示匹配到的字符串。grep -q 静默模式。grep -A #,匹配后面#行。grep -B ,匹配before # lines.grep -C #,context匹配前后各#行。grep -e 或,匹配多个选项。grep -e "ab" -e "cd".grep -w 匹配整个单词。grep -E使用扩展语法。grep -F ,仅匹配字串,不支持正则。grep -f file1 file2.根据file1行的内容,逐行匹配file2,可以实现查找两个文件相同的内容包含。

2.2 正则表达式

2.2.1

. 任意单个字符
[a-bA-Z0-9] 指定范围的单个字符
[^0-9] 指定范围外的单个字符
[:alnum:] 字母和数字
[:lower:],[:uper:],[:alpha:],[:blank:],空白字符(空格、指标符),[:space:],水平和垂直的空白字符,[:cntrl:],不可打印字符,[:graph:],可打印非空字符,[:print:],可打印非空,[:punct:],标点符号。

2.2.2 匹配次数

* 前面字符任意次数。
.* ,点,表示单个字符,点星,表示任意长度字符串,含空串。
\? 前面字符0或1次
\+ 前面字符至少一次
\{n\},前面字符n次
\{m,n\},前面字符至少M次,至多n次。

2.2.3 位置锚定

^ 行首锚定,用于匹配行的最左侧
$行尾锚定,用于匹配行的最右侧位置
^$ 匹配空行,即无任何内容的行
^[[:space:]]*$ 空白行,可以匹配到空格。
\<词,注意是词,词,词,词首锚定,用于单词模式的左侧,某某开头的单词。
\> ,词尾锚定,用于单词模式的右侧,某某结尾的单词。

////更多参考 man 7 regex