如何在两者之间用两个短语分隔两个字符串?

时间:2016-08-18 15:32:13

标签: bash

假设我有一个字符串,其内容为US1SERVLOC2。我希望能够从该字符串中获取字符串US1LOC2

echo "US1SERVLOC2" | cut -f1 -d 'SERV'
echo "US1SERVLOC2" | cut -f2 -d 'SERV'

我最初尝试过这个,但剪切不喜欢不是单个字符的分隔符。我该如何做到这一点?

2 个答案:

答案 0 :(得分:3)

尝试:

s=US1SERVLOC2
echo ${s%SERV*}  # prints US1
echo ${s#*SERV}  # prints LOC2

请参阅:

注意:

  • %SERV*会从SERV*
  • 的末尾删除s。{/ 1}
  • #*SERV会从*SERV
  • 的开头剪切s
  • 如果SERV多次出现,您可以使用%% / ##代替% / #来扩展匹配。但是,这只会让您在SERV的第一次或最后一次出现时减少。如果这不合适,awk将很乐意接受多字符字段分隔符:

    s=US1SERVLOC1US2SERVLOC2US3SERVLOC3
    echo $s | awk -F "SERV" '{print $2}'  # prints LOC1US2
    

答案 1 :(得分:2)

使用内置shell variable expansion运算符。

var=US1SERVLOC2
part1=${var%SERV*}
part2=${var#*SERV}

但是,如果cut在字符串中出现多次,则这些内容与您尝试的SERV的工作方式相同。