我正在处理特定的文件名,并且需要从中提取信息。
文件名的结构类似于:“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
怎样才能达到想要的效果呢。
Thanks.
您需要能够使用环视,我认为 awk/gawk 不支持这一点,但是grep -P
does.
$ pat='(?<=[0-9]{8}_M[0-9]_[0-9]{8}\.[0-9]{3}_._)(.*?)(?=(-W.*)?\.raw\.gz)'
$ echo "20100613_M4_28007834.005_F_SOME-STRING.raw.gz" | grep -Po "$pat"
SOME-STRING
$ echo "20100613_M4_28007834.005_F_OTHER-STRING-W0.40+045.raw.gz" | grep -Po "$pat"
OTHER-STRING
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)