说我有一个像
这样的字符串s1="sxfn://xfn.oxbr.ac.uk:8843/xfn/mech2?XFN=/castor/
xf.oxbr.ac.uk/prod/oxbr.ac.uk/disk/xf20.m.ac.uk/prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst"
或
s2="sxfn://xfn.gla.ac.uk:8841/xfn/mech2?XFN=/castor/
xf.gla.ac.uk/space/disk1/prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst"
我希望在我的脚本中从prod / ie“prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst
”开始提取最后一部分。请注意,$ s1包含两次“prod /".
在bash中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
使用BASH字符串操作,您可以:
echo "prod/${s1##*prod/}"
prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst
echo "prod/${s2##*prod/}"
prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst
答案 1 :(得分:0)
使用awk(这有点过于强大,但如果你有一个充满这些字符串的文件需要解析它可能会有所帮助:
echo "sxfn://xfn.gla.ac.uk:8841/xfn/mech2?XFN=/castor/xf.gla.ac.uk/space/disk1/prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst" | awk -F"\/prod" '{print "/prod"$NF}'
用'/ prod'拆分字符串然后打印出'/ prod'分隔符和字符串中的最后一个标记($NF
)
答案 2 :(得分:0)
sed
可以做得很好:
s1="sxfn://xfn.oxbr.ac.uk:8843/xfn/mech2?XFN=/castor/xf.oxbr.ac.uk/prod/oxbr.ac.uk/disk/xf20.m.ac.uk/prod/v1.8/pienug_ib-2/reco_c21_dr3809_r35057.dst"
echo "$s1" | sed 's/.*\/prod/\/prod/'
这取决于前面.*
部分的收入匹配。