假设我有一个字符串,其内容为US1SERVLOC2
。我希望能够从该字符串中获取字符串US1
和LOC2
。
echo "US1SERVLOC2" | cut -f1 -d 'SERV'
echo "US1SERVLOC2" | cut -f2 -d 'SERV'
我最初尝试过这个,但剪切不喜欢不是单个字符的分隔符。我该如何做到这一点?
答案 0 :(得分:3)
尝试:
s=US1SERVLOC2
echo ${s%SERV*} # prints US1
echo ${s#*SERV} # prints LOC2
请参阅:
这question。
注意:
%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
的工作方式相同。