次のファイルを含むフォルダーがあります:
ondemand_kvm131_img.2
vm114_img.2
vm114_img.3
ondemand_vm205_img.3
label_ondemand_kvm131_img.1
vm117_img.1
そうしたいです。のみ「名前」を表示するので、この場合の出力は次のようになります。
kvm131
vm114
vm114
vm205
kvm131
vm117
どうすればこれができるでしょうか? sed を使って? Grep を使って? よろしくお願いします。
答え1
これを試して:
ls -1 | sed 's/_img.*//;s/.*_//'
答え2
名前の正確なフォーマットとそれを使って何をするつもりかに応じて、これを行う方法はいくつかあります。最も簡単な方法はおそらく次のとおりですls | sed
。
$ ls | sed 's/^\(.*_\)*\([^_]*\)_img\.[0-9]/\2/'
kvm131
kvm131
vm205
vm114
vm114
vm117
ファイル名が適切で、見た目だけが欲しい場合はこれで十分ですが、名前にもっとこだわる場合は、奇妙なファイル名でエラーが発生する可能性があります。次のように個別に取得できます。
$ for file in *; do left=${file%_img.?}; base=${left##*_}; echo $base; done
kvm131
kvm131
vm205
vm114
vm114
vm117
echo
を任意のコマンドに置き換えます。全体的な形式が異なる場合は、これら両方を変更して、形式にさらに近づけることができます。