用于打印符号前内容的命令(一行中的最后一个字符)

用于打印符号前内容的命令(一行中的最后一个字符)

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

相关内容