検索フォルダに特定の単語のみが表示される

検索フォルダに特定の単語のみが表示される

次のファイルを含むフォルダーがあります:

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を任意のコマンドに置き換えます。全体的な形式が異なる場合は、これら両方を変更して、形式にさらに近づけることができます。

関連情報