Shell

sed 或其他腳本,以及用於剪切文件名的正則表達式解決方案

  • July 19, 2018

我需要的是從文件名中獲取 2-3 個變數。我用:

FILES=$(ls -tr .../Files/)

for f in $FILES;
   do
......

文件如下所示:

$$ letters and/or numbers and (underscore or nothing) $$$$ 6 digit number $$$$ underscore and maximum 6 character or number, or nothing at all $$$$ . $$$$ extension $$ 我需要第一部分

$$ $$六個 didigt 數字和下劃線+字元(如果存在)。所以1。$$ $$2.$$ $$和3。$$ $$. 我嘗試了什麼:

echo sanyi_123456_m2.txt | sed -e "s/^\(\w{4,40}\)\_?\(\\d{6}\)\_?\(\\w{,6}\)?\(\.\w{2,4}$\)/\\1 \\2 \\3/g"

我需要什麼:

sanyi_ 123456 _m2

有人可以幫我解決正則表達式嗎?

非常感謝

首先,反斜杠太多了。此外,貪婪你的第一個 glob 會吃掉整個字元串,直到點。您可能希望使用擴展的正則表達式來清除圖片。第二個下劃線取決於必須用括號括起來的最後一部分(根據您的描述)。您不需要第四個 glob(在您的版本中)。

像這樣的東西:

echo sanyi_123456_m2.txt | sed -r "s/^([a-z]{4,40})_?([0-9]{6})(_(\w{,6}))?\.\w{2,4}$/\1 \2 \4/g"

您也可以在可以進行非貪婪量化的情況下使用 perl 正則表達式。

引用自:https://serverfault.com/questions/922430