
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'