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