在 Unix 文件上使用正则表达式提取子字符串

g4u*_*r4v 4 grep sed awk regular-expression

我有以下内容的文件。

/ABC/RTE/AD_900_VOP_123/OPP
/ABC/RTE/TRE/AD_900_VOP_145/BBB
/ABC/RTE/AN_900_VFP_124/FBF
/ABC/RTE/HD_900_FOP_153/WEW
/ABD/RDV/AD_900_VOP_123/OPP
/ABC/RTE/WD_900_VOP_123/GRR/TRD
/ABC/RTE/RTD/AR_900_VOP_443/SDD
Run Code Online (Sandbox Code Playgroud)

如何在此文件上使用正则表达式,以便获得输出,例如

AD_900_VOP_123
AD_900_VOP_145
AN_900_VFP_124
HD_900_FOP_153
AD_900_VOP_123
WD_900_VOP_123
AR_900_VOP_443
Run Code Online (Sandbox Code Playgroud)

iru*_*var 7

GNU grep

grep -oE '[[:alpha:]]+_[[:digit:]]+_[[:alpha:]]+_[[:digit:]]+' 
Run Code Online (Sandbox Code Playgroud)

使用 perl-regex 标志和look-behind 和look-ahead 断言来保证匹配被包围 /

grep -oP '(?<=/)[[:alpha:]]+_[[:digit:]]+_[[:alpha:]]+_[[:digit:]]+(?=/)'
Run Code Online (Sandbox Code Playgroud)