awk命令查找多次出现的文本模式的名称

dav*_*ier 1 shell awk

我有一个文本文件,其中包含所有文件的列表,文件名如下

Test.java_v1 
Test.java_v1_v1 
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

如何使用awk找到其扩展名中包含多一个"_"的文件的名称?

我想要考虑_之后的.事情.

Test_1.java_v1
Test.java_V1_V1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

输出不应该包含Test_1.java_v1,我该怎么做?

jks*_*hah 5

回答新要求仅考虑文件扩展进行检查

运用 awk

awk -F'.' '$2~/_.*_/' file
Run Code Online (Sandbox Code Playgroud)

测试

% cat file 
Test.java_v1
Test_1.java_v1
Test.java_v1_v1
Real.cbs_v2_v2

% awk -F'.' '$2~/_.*_/' file
Test.java_v1_v1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

运用 sed

sed -n 's/.*\.//; /_.*_/p' file
Run Code Online (Sandbox Code Playgroud)

运用 grep

grep '.*\..*_.*_' file
Run Code Online (Sandbox Code Playgroud)

回答旧要求考虑文件名进行检查

运用 awk

awk -F'_' 'NF>2' file
Run Code Online (Sandbox Code Playgroud)

输出:

Test.java_v1_v1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

简短的介绍

-F'_'- 单独的字段_.

NF - 字段数量

'NF>2'- 简短形式NF>2 {print $0}- 满足条件的印刷线NF>2

这里,数量_等于NF-1.如果您想要检查#'_'>1,您需要检查NF>2