1

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

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,我该怎么做?

4

1 回答 1

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

于 2013-10-19T12:46:59.767 回答