假設我有 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'