簡體   English   中英

從文件名中刪除開頭的 4 個字母和結尾的 4 個字母

[英]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 個字符,你可以使用參數擴展、 sedcutawk或任何你想要的......

例如使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM