Bash匹配字符串的一部分

时间:2016-08-05 15:11:34

标签: bash string-matching

说我有一个像

这样的字符串
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中执行此操作的最佳方法是什么?

3 个答案:

答案 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/'

这取决于前面.*部分的收入匹配。