我所擁有的文件與以下文件名格式列表:從文件名中提取子串
[some unknown amount of characters][_d][yyyymmdd][some unknown amount of characters]
我想提取包含日期(yyyymmdd
),我知道將永遠"_d"
被起訴的子字符串。所以基本上我想提取"_d"
之後的前8個字符。
要做到這一點,最好的方法是什麼?
我所擁有的文件與以下文件名格式列表:從文件名中提取子串
[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}).*$/\1/'
20150616
這得到了串並刪除一切都交給_d
。然後,捕獲以下8個字符並將其打印回來。
sed -r
用於能夠趕上組,只是()
,而不是\(\)
。^.*_d(.{8}).*$
^
行首.*
任何數目的字符(甚至他們的0)_d
要匹配(.{8})
因爲.
匹配任何字符,.{8}
比賽8個字符的文字_D 。隨着()
我們抓住他們,以便他們可以在以後重用。.*$
直到行尾的任意數量的字符。\1
打印抓住的組。嘿謝謝!這工作完美!你能向我解釋表達的語法嗎? –
@AlecH我剛剛更新了一些關於該命令的解釋。 – fedorqui
您需要確保'_d'在日期前沒有顯示在其他地方。 – HuStmpHrrr