从文件名中提取子字符串
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个字符。使用 ()
我们可以捕获它们,以便以后可以重复使用它们。
.*$
任意数量的字符,直到行尾。
打印回捕获的组。
我有一个文件列表,文件名格式如下:
[some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters]
我想提取包含日期 (yyyymmdd
) 的子字符串,我知道它总是在 "_d"
之后。所以基本上我想提取 "_d"
.
执行此操作的最佳方法是什么?
我会用 sed
:
$ echo "asdfasd_d20150616asdasd" | sed -r 's/^.*_d(.{8}).*$//'
20150616
这会获取一个字符串并删除 _d
之前的所有内容。然后,捕获以下 8 个字符并将它们打印回来。
sed -r
用于仅使用()
而不是\(\)
. 来捕获组
^.*_d(.{8}).*$
^
行首.*
任意数量的字符(甚至0个)_d
你要匹配的文字_d(.{8})
因为.
匹配任意字符,.{8}
匹配8个字符。使用()
我们可以捕获它们,以便以后可以重复使用它们。.*$
任意数量的字符,直到行尾。
打印回捕获的组。