我有一个包含以下文件的文件夹:
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
为您选择的命令。如果您的整体格式不同,则可以更改这两者以更紧密地匹配格式。