2015-06-16 86 views
0

我所擁有的文件與以下文件名格式列表:從文件名中提取子串

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

我想提取包含日期(yyyymmdd),我知道將永遠"_d"被起訴的子字符串。所以基本上我想提取"_d"之後的前8個字符。

要做到這一點,最好的方法是什麼?

+0

您需要確保'_d'在日期前沒有顯示在其他地方。 – HuStmpHrrr

回答

2

我會用sed

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

這得到了串並刪除一切都交給_d。然後,捕獲以下8個字符並將其打印回來。

  • sed -r用於能夠趕上組,只是(),而不是\(\)
  • ^.*_d(.{8}).*$
    • ^行首
    • .*任何數目的字符(甚至他們的0)
    • _d要匹配
    • (.{8})因爲.匹配任何字符,.{8}比賽8個字符的文字_D 。隨着()我們抓住他們,以便他們可以在以後重用。
    • .*$直到行尾的任意數量的字符。
  • \1打印抓住的組。
+0

嘿謝謝!這工作完美!你能向我解釋表達的語法嗎? –

+0

@AlecH我剛剛更新了一些關於該命令的解釋。 – fedorqui