在python中,我会做一些简单的事情,比如sRet = sOut.split('Word')
在bash中,从其他答案中可以找到,我有以下两种方法在我的情况下是不够的,但可能对将来的人有用:
sOut="I want this Point to matter"
1) sRet=( $sOut )
2) IFS="Point " read -r -a sRet <<< ${sOut}
echo ${sRet[-1]}
我想要返回:"to matter"
(1) 给出:"matter"
(2) 给出:"er"
第一个只按空格分隔,第二个按最后一个字符分隔,在本例中为't'
。
如何像在python中那样用一个完整的字符串进行拆分?
sOut="I want this Point to matter"
s="Point "
[[ $sOut =~ $s(.*) ]] && echo ${BASH_REMATCH[1]}
输出:
重要的
IFS
是单个字符,因此您需要部署另一个工具。在这种情况下,我建议awk
:
$ awk -F 'Point' '{print $NF}' <<< "$sOut"
to matter
您可以将"Point"替换为包含分隔符的变量。您还可以更改返回拆分的哪一部分。变量$NF
的意思是"最后一个元素"。您也可以将$1
用于第一个元素,将$2
用于第二个元素,依此类推
您可以使用awk
来拆分字符串:
text="I want this Point to matter"
s='Point'
awk -v s="$s" -v text="$text" 'BEGIN {split(text, a, "[[:blank:]]*" s "[[:blank:]]*");
for (i in a) print a[i]}'
I want this
to matter
只获得最后一场比赛:
awk -v s="$s" -v text="$text" 'BEGIN {n=split(text, a, "[[:blank:]]*" s "[[:blank:]]*"); print a[n]}'
to matter
或者:
awk -v s="$s" 'BEGIN{FS="[[:blank:]]*" s "[[:blank:]]*"} {print $NF}' <<< "$text"
to matter
IFS
不适用于多个字符串。因此,IFS='Point'
将分割每个字符P
、o
、i
、n
、t
的输出。
sDelim="Point"
sRet1=$(awk -F ${sDelim} '{print $1}' <<< ${sOut})
sRet2=$(awk -F ${sDelim} '{print $NF}' <<< ${sOut})
考虑到所有其他优秀的答案,我最喜欢这个,原因如下:
1) 短而甜
2) 当想要使用变量时,一切都相当明确
3) 可以选择任何元素:1,2,。。从一开始,NF,NF-1,。。从结尾
4) 如果sDelim
实际上不在sOut
中,则脚本不会使异常
主要感谢@bishop把我带到这个
您可以使用sed
的括号功能来检索匹配的字符串。
以下代码:
sOut="I want this point to matter"
s="point "
echo $sOut | sed "s/.*$s(.*)/1/"
会给我:
to matter
作为输出。