我有一个文本文件,其中包含所有文件的列表,文件名如下
Test.java_v1
Test.java_v1_v1
Real.cbs_v2_v2
如何使用 awk找到扩展名中包含多个“_”的文件的名称?
我希望考虑到_
之后。.
Test_1.java_v1
Test.java_V1_V1
Real.cbs_v2_v2
输出不应包含Test_1.java_v1
,我该怎么做?
回答仅考虑文件扩展进行检查的新要求
使用awk
awk -F'.' '$2~/_.*_/' file
测试
% 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
使用sed
sed -n 's/.*\.//; /_.*_/p' file
使用grep
grep '.*\..*_.*_' file
回答旧要求以检查文件名
使用awk
awk -F'_' 'NF>2' file
输出:
Test.java_v1_v1
Real.cbs_v2_v2
简短的介绍
-F'_'
- 用 . 分隔字段_
。
NF
- 字段数
'NF>2'
- 简短形式NF>2 {print $0}
- 打印行满足条件NF>2
这里,数量_
等于NF-1
。如果你想检查#'_'>1
,你需要检查NF>2