搜索文件夹仅显示某些词语

搜索文件夹仅显示某些词语

我有一个包含以下文件的文件夹:

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为您选择的命令。如果您的整体格式不同,则可以更改这两者以更紧密地匹配格式。

相关内容