我有一个文件列表,其文件名格式如下:
[some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters]
我想提取包含日期(yyyymmdd
)的子字符串,我知道该字符串始终由"_d"
继续。所以基本上我想提取"_d"
之后的前8个字符。
这样做的最佳方式是什么?
答案 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
打印回来的小组。