比方说,我有一个字符串,其内容是US1SERVLOC2
。我希望能够从该字符串获得字符串US1
和LOC2
。如何获得两个字符串之间用短语分隔?
echo "US1SERVLOC2" | cut -f1 -d 'SERV'
echo "US1SERVLOC2" | cut -f2 -d 'SERV'
我原本试过这个,但是切割不喜欢不是单个字符的分隔符。我该如何做到这一点?
比方说,我有一个字符串,其内容是US1SERVLOC2
。我希望能够从该字符串获得字符串US1
和LOC2
。如何获得两个字符串之间用短语分隔?
echo "US1SERVLOC2" | cut -f1 -d 'SERV'
echo "US1SERVLOC2" | cut -f2 -d 'SERV'
我原本试过这个,但是切割不喜欢不是单个字符的分隔符。我该如何做到这一点?
尝试:
s=US1SERVLOC2
echo ${s%SERV*} # prints US1
echo ${s#*SERV} # prints LOC2
请参阅:在Advanced Bash-Scripting Guide
子串拆卸一节。
这question。
注:
%SERV*
将削减SERV*
从s
结束。#*SERV
将削减*SERV
从s
开始。如果SERV
出现多次,您可以使用%%
/##
而不是%
/#
来扩展匹配。但是,这只会允许您在第一次或最后一次发生SERV
时减少。如果不适合,awk
会欣然接受多字符分隔域:
s=US1SERVLOC1US2SERVLOC2US3SERVLOC3
echo $s | awk -F "SERV" '{print $2}' # prints LOC1US2
使用内置的外壳variable expansion运营商。
var=US1SERVLOC2
part1=${var%SERV*}
part2=${var#*SERV}
但是,这些都不行相同,您试图cut
如果SERV
出现超过字符串中出现。