正则表达式提取匹配的部分行

时间:2016-03-10 18:14:58

标签: regex bash awk grep

我试图写一个正则表达式来获取以" A"开头的文件的每一行的最后一个字。并以" /"

结束
grep '^A.*/$' list_svn.txt

这给整行:A Java/SYSTEM_A/Sources/branch/developerA/src/org/hl7/v3/但我想要的只是" v3"字符串。

我试过awk但也没有成功。

grep '^A.*/$' list_svn.txt | awk -F '/' '{print $0, $(NF-1)}'
>> Java/SYSTEM_A/Sources/branch/developerA/src/org/hl7/v3/ v3

2 个答案:

答案 0 :(得分:2)

您可以完全避免grep使用您可以执行的awk:

awk -F/ '/^A.*\/$/ {print $(NF-1)}' list_svn.txt

v3

答案 1 :(得分:1)

使用GNU grep和look-arounds:

$ grep -Po '^A.*/\K[^/]*(?=/$)' <<< 'A  Java/SYSTEM_A/Sources/branch/developerA/src/org/hl7/v3/'
v3

-P启用Perl正则表达式(前瞻和后瞻所需),-o仅返回匹配。

\K充当可变长度的后视:“将所有内容匹配到此处但不包括在匹配中”。实际匹配是/以外的字符序列,(?=/$)位代表“后跟/和行尾”(但也不包括在匹配中)