Linux shell 中如何从路径名提取指定字符串

Linux shell 中如何从路径名提取指定字符串

我要写一个shell 脚本 ,首先需要从文件名目录名中提取一串字符,但是遇到难题。
$PWD
路径名为 /home/ lxy/ hhhhh-a.bbb.cc.d (格式类型固定)
其中 现在我只想要 a.bbb.cc 这一段。
其中 hhhhh- 格式固定
a.bbb.cc.d 这一段长度有浮动,但前面的 a. 和后面的 .d 是固定的

我需要的是 a.bbb.cc 这一段 ,试过很多办法,cut awf sed grep 都无果,急求高手解决……

这个不需要正则式效率差,难理解。使用两次shell 扩展就可以了。
#!/bin/bash
a="$1"
a="${a##*-}"
#从开头删除到顺数最后一个减号。
a="${a%\.*}"
#从结尾删除到倒数第一个小数点。
echo "$a"

脚本保存为 a.sh
执行命令 ./a.sh “/home/ lxy/hhhhh-a.bbb.cc.d”
请把参数用引号括住。
得到 a.bbb.cc
说明:
${parameter#pattern}和${parameter##pattern} 掐头,#是最小匹配,##是最大匹配,将变量从开头匹配pattern,最后扩展为原变量值去掉匹配的内容后的内容。
${parameter%pattern}和${parameter%%pattern} 去尾,%是最小匹配,%%是最大匹配,将变量从结尾匹配pattern,最后扩展为原变量值去掉匹配的内容后的内容。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-06
用sed正则:
echo /home/lxy/hhhhh-a.bbb.cc.d | sed 's/[^-]*-\(a\.[^\.]*\.[^\.]*\)\.d/\1/'
第2个回答  2012-09-06
echo /home/lxy/hhhhh-a.bbb.cc.d | awk -F"/" '{print substr($4,7,length($4)-8)}'
相似回答