Linux 中 grep命令仅仅输出匹配的字符串
001、
[root@PC1 test]# ls a.txt [root@PC1 test]# cat a.txt ## 测试数据 aa 33 aa 77 bb aa aa 22 aa kk cc bb dd aa uu 88 33 88 rr qq [root@PC1 test]# grep -oP "aa" a.txt ## 输出仅仅匹配的内容,但是换行了 aa aa aa aa aa aa [root@PC1 test]# grep -noP "aa" a.txt ## 同时输出匹配的行号 1:aa 1:aa 2:aa 2:aa 2:aa 3:aa [root@PC1 test]# grep -noP "aa" a.txt | sed 's/:/\t/' | awk '{if(NR == 1) {printf("%s\t", $2); tmp = $1} else {if($1 == tmp){printf("%s\t", $2)} else {printf("\n%s\t", $2);}}; tmp = $1}' | sed '$ s/\t$/\n/' ## 每一行匹配到的内容在原始行中输出 aa aa aa aa aa aa
。
002、输出对应的行号
[root@PC1 test]# grep -nP "aa" a.txt | cut -d ":" -f 1 | paste - <(grep -noP "aa" a.txt | sed 's/:/\t/' | awk '{if(NR == 1) {printf("%s\t", $2); tmp = $1} else {if($1 == tmp){printf("%s\t", $2)} else {printf("\n%s\t", $2);}}; tmp = $1}' | sed '$ s/\t$/\n/') ## 输出对应的行号 1 aa aa 2 aa aa aa 3 aa
。