Grep
從文件名中刪除特定(已知)副檔名(如果存在)
我什至不確定是否
grep
要用於單行數據中的正則表達式。Google搜尋讓我找到了這個前瞻表達式,它與grep
匹配任何.ext
文件並返回裸名:XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext) name
很好,但現在我提示使用者保存文件,我不確定他是否會鍵入帶有副檔名的名稱。我嘗試使先行成為有條件的,確保所有名稱都匹配,但這會返回我不理解的內容:
XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?" name ext
如果我省略副檔名,它會起作用:
XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?" name
那麼這是一個 grep 問題還是 regex 問題?也許我需要以某種方式使前瞻不擷取?
您可以使用 POSIX shell 替換來刪除
.ext
:file='name.ext' printf '%s\n' "${file%.ext}"
要將無擴展字元串分配給新變數,請執行
noext="${file%.ext}"
使用您的方法(有更好的解決方案):
echo name | grep -oP '^[^.]+(?=(\.ext)?$)'