[英]Remove starting 4 letters and ending 4 letters from a file name
我想要一個命令,可以從文件名中去除開頭的 4 個字母和結尾的 4 個字母。 例如:如果文件名是:form1234.tgz 我想從文件名中獲取數字 1234。 有人可以建議,一種可以在 Linux 上的命令提示符下完成的簡單方法嗎?
使用cut
可以輕松刪除前四個字符。 不幸的是,它沒有內置的方式從字符串的結尾刪除字符,但它使用你總是可以反向rev
申請cut
,然后rev
回來了。
$ echo $FILENAME | cut -c5- | rev | cut -c5- | rev
使用參數替換。
filename=form1234.tgz
short=${filename#????}
short=${short%????}
#
從左邊移除, %
從右邊移除。
您實際上可以使用很多選項...
對於此類事情,最好匹配您想要的內容而不是刪除您不需要的內容:可能會發生拼寫錯誤,或者可能存在已截斷的文件......
例如,如果你想擺脫擴展,你可以使用參數擴展,幾乎每個 shell 都支持:
printf "%s" "${file%.*}"
如果您只需要數字,您可以使用正則表達式:
printf "%s" "${file}" | sed -e "s/.*\([0-9]*\)\..*/\1/"
假設您的問題很籠統,並沒有提供您想要的大量信息......
如果你想靜態刪除第一個和最后 4 個字符,你可以使用參數擴展、 sed
、 cut
、 awk
或任何你想要的......
例如使用 sed,它會是這樣的:
printf "%s" "${file}" | sed -e "s/^....\(.*\)....$/\1/"
隨着參數擴展將是:
file="${file#????}"
file="${file%????}"
printf "%s" "${file}"
最后,如果你是在純 bash 環境中,你可以簡單地使用一些 bash 參數擴展(注意這個選項不會在任何地方都有效):
printf "%s" "${file:4:-4}"
請注意,每個printf
都可以(顯然)被echo
(或echo -n
)替換。
如果您知道要去掉開頭和結尾的字符數,那可能是最簡單的。
name=form1234.tgz
echo "${name:4:$((${#name} - 8))}"
1234
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.