我有很多文件,其中的行看起来像
lotsofblah/XY##_####_morefoo
其中 # 是数字。现在我只想显示部分
YZ##_####
在 bash 中,每个当然都在一个新行中。
答案1
假设您希望 XY 是任意两个字母......
就像是
grep -Eo "[A-Z]{2}[0-9]{2}_[0-9]{4}" file
将匹配 [两个字母][两个数字]_[四个数字]
如果您愿意,它可以更精确一些,确保前面有一个 / 后面有一个 _,但这是一个起点。
通过 man grep 把这些放在一起:
-E, --extended-regexp Interpret PATTERN as an extended regular expression (see below) -o, --only-matching Show only the part of a matching line that matches PATTERN.
答案2
我认为 XY 和 YZ 是相同的,我将把它们视为 XY
egrep "XY[0-9]{2}_[0-9]{4}" filename -o
关键是-o
仅显示匹配文本的选项。