从文件名中提取子字符串

Extracting Substring from File Name

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

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

我想提取包含日期 (yyyymmdd) 的子字符串,我知道它总是在 "_d" 之后。所以基本上我想提取 "_d".

之后的前 8 个字符

执行此操作的最佳方法是什么?

我会用 sed:

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

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

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