Linux下如何提取含_abc模式的文件名中该模式前的部分并排除不含该模式的文件
解决方法:提取含
_abc的NC文件前缀 我来帮你搞定这个需求!核心思路是先筛选出包含_abc的.nc文件,再提取_abc之前的前缀部分,这样就能自动排除不含_abc的文件(比如你提到的kjkh_lkm_kkkkk_bbb_198101-196012.nc)。这里有两个实用的命令方案:
方案1:grep + sed 组合
这个组合逻辑清晰,先过滤再处理:
ls *.nc | grep "_abc" | sed 's/_abc.*//'
ls *.nc:列出当前目录下所有.nc格式文件grep "_abc":只保留文件名中包含_abc的条目sed 's/_abc.*//':将每个匹配到的文件名中_abc及其后面的所有内容替换为空,得到我们需要的前缀
方案2:单awk命令实现
用awk可以一步完成过滤和提取,更简洁:
ls *.nc | awk '/_abc/ {sub(/_abc.*/, "", $0); print $0}'
/\_abc/:awk只处理包含_abc的行sub(/_abc.*/, "", $0):对当前行执行替换操作,把_abc及后续内容清空print $0:输出处理后的前缀
验证结果
用你给出的文件列表测试,两个命令都会输出符合预期的结果:
- kjkh_lkm_kkkkk
- LM_lkm_kjjkk
- kjkh_lkm_kjjkk
- SAM_lkm
- kjk_lkm
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

