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