我有以下命令从字符串中提取子字符串,但它不包括模式,请您帮忙。
echo ". ~/.bash_profile ; /home/script/sample.sh >> ~/log/sample.log" | sed -e 's/.*\/home\(.*\)sh.*/\1/'
结果:/script/sample
但是我希望结果是/home/script/sample.sh
答案 0 :(得分:2)
结果是捕获组\(..\)
中的所有内容,因此只需将其扩展到所需的整个范围即可:
echo ". ~/.bash_profile ; /home/script/sample.sh >> ~/log/sample.log" |
sed -e 's/.*\(\/home.*sh\).*/\1/'
答案 1 :(得分:1)
如果您的字符串/home/script/sample.sh
始终位于同一位置,则可以尝试:
echo ". ~/.bash_profile ; /home/script/sample.sh >> ~/log/sample.log" | cut -d' ' -f4
/home/script/sample.sh
如果您对awk
感到满意,请尝试执行以下操作,而不考虑字符串home
的位置,它将匹配正则表达式并打印。
echo ". ~/.bash_profile ; /home/script/sample.sh >> ~/log/sample.log" | awk 'match($0,/\/home.*\.sh/){print substr($0,RSTART,RLENGTH)}'