我有一个文本文件,其中包含所有文件的列表,文件名如下
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,我该怎么做?
回答新要求仅考虑文件扩展进行检查
运用 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