我有一個包含以下文件的資料夾:
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?格雷普?提前致謝。
答案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
為您選擇的命令。如果您總體上有不同的格式,則可以變更這兩個選項以更緊密地匹配格式。