Shell
sed 或其他腳本,以及用於剪切文件名的正則表達式解決方案
我需要的是從文件名中獲取 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 正則表達式。