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

 。

 

posted @ 2024-07-13 13:00  小鲨鱼2018  阅读(4)  评论(0编辑  收藏  举报