文本处理: cut,sort,uniq,grep
cut:
-d: 指定字段分隔符,默认是空格
-f: 指定要显示的字段
-f1 显示第一个字段
-f 1,3 显示第一个和第三个
-f 1-3 显示第一个到第三个
--complement: 反向列选择
-c:仅显示行中指定范围的字符
例子
cut -c1-3 /etc/passwd
cut -d: -f1,3 /etc/passwd
sort
-n:数值排序
-r:降序
-t:字段分隔符
-k:表示以那个字段进行排序
-u:排序后相同的行只显示一次
-o:排序后的结果存入指定的文件
-f:忽略字符大小写
-b:忽略每行前面开始出的空格字符
例子
sort -t: -k3 /etc/passwd
sort -t: -k4 -n /etc/passwd
seq 10 |sort -rn
uniq:
-c:显示文件中行重复的次数
-d:只显示重复的行
grep
是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
egrep和fgrep都是grep的扩展,命令只跟grep有很小不同
-c 或 --count : 计算符合样式的列数。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
-i 或 --ignore-case : 忽略字符大小写的差别
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-q 或 --quiet或--silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-v 或 --revert-match : 显示不包含匹配文本的所有行。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> :
搜索root的行
grep -n 'root' /etc/passwd
搜索没有root和行(-v 方向选择)
grep -v 'root' /etc/passwd
利用[]搜索集合字符 匹配 roat robt roct
grep -n 'r[abc]ot' /etc/passwd
搜索oo前面没有g的(^表示排除)
grep -n '[^g]oo' /etc/passwd
搜索以小写字母开头
grep -n '^[a-z]' /etc/passwd
搜索开头不是英文字母的行
grep -n '^[^a-zA-Z]' /etc/passwd
搜索以点结尾的行
grep -n '\.$' /etc/passwd
搜索空行
grep -n '^$' /etc/passwd
搜索非空行
grep -vn '^$' /etc/passwd
搜索两个以上的oo字符串
grep -n 'ooo*' /etc/passwd
搜索包含两个o的字符串的行
grep -n 'o\{2\}' /etc/passwd
搜索两个以上o的
grep -n 'go\{2,\}g' /etc/passwd
去除空白后或者以#开头
egrep -v '^$|^#' /etc/passwd or grep -Ev '^$|^#' /etc/passwd
统计文件或者文本中包含匹配字符串的行数 -c
grep -c "root" /etc/passwd
搜索多个文件并查找匹配文本
grep -c root /etc/passwd /root/passwd_test
在多级目录中对文本进行递归搜索 -r
grep -r 'root' /etc/
忽略匹配样式中的字符大小写
grep -i 'root' passwd_test
# 制动多个匹配样式
grep -e root -e www passwd_test
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
#grep静默输出
grep -q root passwd_test
echo $?
#显示匹配某个结果之前的3行
grep -B 3 nobody passwd_test
#显示匹配某个结果之后的3行
grep -A 3 nobody passwd_test
#显示匹配某个结果的前三行和后三行
grep -C 3 nobody passwd_test