用於列印符號前內容的命令(一行中的最後一個字元)

用於列印符號前內容的命令(一行中的最後一個字元)

假設我有 3 個文件:

abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip

我只想列印最後一個底線(_)之前的字符

預期輸出為:

abc_def
abc
abc_def_ghi

答案1

您可以使用帶有參數擴展的 bash:

$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi

答案2

使用 sed,你可以嘗試

sed -E 's/(.*)_.*/\1/'

例如,將其複製並貼上到命令提示字元中

% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF

輸出

abc_def
abc
abc_def_ghi

請注意,此命令保留了sed模式空間的自動列印,這意味著與模式不匹配的任何其他行(即不包含任何_'s)將成為輸出的一部分。

sed -n -E 's/(.*)_.*/\1/p'

相關內容