从文件名中提取子字符串

时间:2015-06-16 15:29:22

标签: string awk substring extract cut

我有一个文件列表,其文件名格式如下:

[some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters]

我想提取包含日期(yyyymmdd)的子字符串,我知道该字符串始终由"_d"继续。所以基本上我想提取"_d"之后的前8个字符。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

我会使用sed

$ echo "asdfasd_d20150616asdasd" | sed -r 's/^.*_d(.{8}).*$/\1/'
20150616

这会获取一个字符串并删除_d以外的所有内容。然后,捕获以下8个字符并将其打印回来。

  • sed -r用于捕获仅()而不是\(\)的群组。
  • ^.*_d(.{8}).*$
    • ^行首
    • .*任意数量的字符(甚至0个字符)
    • _d字面_d要匹配
    • (.{8}),因为.匹配任何字符,.{8}匹配8个字符。使用()我们会抓住它们,以便以后可以重复使用它们。
    • .*$任意数量的字符,直到该行的末尾。
  • \1打印回来的小组。