シンボル(行の最後の文字)の前に内容を印刷するコマンド

シンボル(行の最後の文字)の前に内容を印刷するコマンド

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'

関連情報