Bash根据字符串拆分字符串

Bash根据字符串拆分字符串,bash,Bash,在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]} sOut=“我希望这一点很重要” 1) sR

在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]}
sOut=“我希望这一点很重要”
1) sRet=(苏特美元)

2) IFS=“Point”read-r-a sRet您可以使用
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}
IFS
为单字符,因此需要部署另一个工具。在这种情况下,我建议
awk

$ awk -F 'Point' '{print $NF}' <<< "$sOut"
 to matter
$awk-F'点'{print$NF}'
输出:

to matter 要紧
您可以使用sed的括号功能来检索 匹配的字符串

以下代码:

sOut="I want this point to matter"
s="point "
echo $sOut | sed "s/.*$s\(.*\)/\1/"
你能给我:

to matter
作为输出。

sDelim=“点”
sDelim="Point"
sRet1=$(awk -F ${sDelim} '{print $1}' <<< ${sOut})
sRet2=$(awk -F ${sDelim} '{print $NF}' <<< ${sOut})

sRet1=$(awk-F${sDelim}{print$1}对于字符串操作,我建议您调用sed(在您的例子中,从Bash脚本中).IFS只能是一个字符,所以将在点中的所有字母上拆分。我也不明白您希望第一个示例在点后打印出来是什么?@123:只是显示我的内容,供未来的人阅读此问题。这可能对他们有用且足够。我将编辑此问题以使其更清楚。这非常具体c和有限的示例,但在我更广泛的使用案例中没有用处。是否可以将其扩展为打印最后一个元素,而不是第二个元素?@Roman不这样做。当您在“点”(在您的示例中)上拆分时,有两部分:前一部分和后一部分。
$1
=“我想要这个”和
$2
=“重要”在这个例子中,第二个也是最后一个。如果我的sOut增长到包含很多“Point”s、 然后第二个和最后一个元素是不同的。你的答案很有效,很漂亮,只是想知道它能走多远。哈!刚刚发布了你的最新变化。不确定区别是什么,但你当前的答案很好地考虑了变量。感谢所有的帮助!它在
之前不留空格吗要引用
${sDelim}
${sOut}
,否则它们会受到分词和全局搜索的影响。我可以知道下一票的原因吗?有没有这样做不起作用的测试用例?或者,即使不使用流编辑器也可以解决这个问题,就像Cyrus在另一个答案中所做的那样?
to matter
sDelim="Point"
sRet1=$(awk -F ${sDelim} '{print $1}' <<< ${sOut})
sRet2=$(awk -F ${sDelim} '{print $NF}' <<< ${sOut})