記号(行の最後の文字)の前にある内容を印刷するコマンド

記号(行の最後の文字)の前にある内容を印刷するコマンド

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'

関連情報