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

时间:2013-10-19 12:39:21

标签: shell awk

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

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

1 个答案:

答案 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