【发布时间】:2011-05-25 21:39:41
【问题描述】:
我正在处理一个特定的文件名,并且需要从中提取信息。
文件名的结构类似于:“20100613_M4_28007834.005_F_RANDOMSTR.raw.gz”
使用 RANDOMSTR 是一个最多 22 个字符的字符串,其中可能包含(或不包含)格式为“-W[0-9].[0-9]{2}.[0-9]{3 }”。这个子串还具有以“-W”开头的独特特性。
我需要提取的信息是没有这个可选子串的 RANDOMSTR 的子串。
我想在 bash 脚本中实现这一点,到目前为止,我发现的最佳选择是将 gawk 与正则表达式一起使用。迄今为止我最好的尝试失败了:
gawk --re-interval '{match ($0,"([0-9]{8})_(M[0-9])_([0-9]{8}\\.[0-9]{3})_(.)_(.*)(-W.*)?.raw.gz",arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_OTHER-STRING-W0.40+045.raw.gz"
OTHER-STRING-W0.40+045
预期结果是:
gawk --re-interval '{match ($0,$regexp,arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_SOME-STRING.raw.gz"
SOME-STRING
gawk --re-interval '{match ($0,$regexp,arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_OTHER-STRING-W0.40+045.raw.gz"
OTHER-STRING
怎样才能得到想要的效果。
谢谢。
【问题讨论】:
-
您提到子字符串具有
"-W[0-9].[0-9]{2}.[0-9]{3}"模式,但您的示例输入包含...W0.40+045.raw.gz。您需要同时满足这两种需求吗? -
我没有将“.raw.gz”作为子字符串的一部分。
-
抱歉,我的意思是要提请注意加号,它不会被您的模式覆盖。
-
意思是模式只是为了匹配我不想要的来自 RANDOMSTR 的部分,而不是整个字符串。 (我无法编辑我之前的评论)
-
好吧,我有点懒,只是放了一个“。”在加号的地方。它与字符串匹配,所以对我来说没问题。但最后我并没有真正使用那种模式,使用“(-W。*)”对我来说就足够了。子字符串的模式仅作为参考提供,以防万一。