如何基于子目录对grep命令的输出结果进行排序
问题
我用grep命令查找所有包含指定字符串的文件,命令如下:
grep -Ril "mystring" --exclude-dir=myDir
当前输出未按路径的第一级和第二级子目录(格式为dir<value>/custom<VALUE>)排序,当前输出为:
dir1/customZ/dir1/myfile dir1/customX/dir1/myfile dir1/customY/dir1/myfile dir1/customV/dir2/myfile dir2/customB/dir2/myfile dir2/customZZ/dir2/myfile dir2/customX/dir2/myfile
我期望按dir<value>/custom<VALUE>段排序后的输出为:
dir1/customV/dir2/myfile dir1/customX/dir1/myfile dir1/customY/dir1/myfile dir1/customZ/dir1/myfile dir2/customB/dir2/myfile dir2/customX/dir2/myfile dir2/customZZ/dir2/myfile
解决方案
将grep的输出通过管道传给sort命令,指定按斜杠分隔的第1、2个字段排序即可:
grep -Ril "mystring" --exclude-dir=myDir | sort -t'/' -k1,2
命令说明
-t'/':设置字段分隔符为斜杠/,路径会被拆分为多个字段(比如dir1/customZ/dir1/myfile会拆成dir1、customZ、dir1、myfile四个字段)-k1,2:指定仅基于第1到第2个字段(即dir<value>/custom<VALUE>部分)按字典序排序,完全匹配期望的排序效果。
内容的提问来源于stack exchange,提问作者N. J
相关产品推荐
相关产品推荐

