
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
パターンスペースの の自動印刷をそのまま残します。つまり、パターンに一致しない行(つまり を含まない行)も_
出力の一部になります。これらが不要な場合は、次のようにします。
sed -n -E 's/(.*)_.*/\1/p'