如何在 zshell 中拆分字符串并捕获子字符串到行尾?

How can I split a string in zshell and capture a substring-to-end-of-line?

我有一个字符串,我想将其拆分为一个子字符串,return 将结果的第二个子集拆分为一个字符串。我如何在 zshell 中执行此操作?

我可以在关键字和 return 子字符串的下一个单词处拆分,如下所示:

line="quick brown fox jumps over sleepy dog"
splits=${(MS)line##over*}
nextword=$splits[(w)1] #<-- returns "sleepy"

如何在拆分后得到整个子字符串,例如 "sleepy dog""sleepy brown dog"(如果字符串包含更多单词)?本质上,我在 zshell 中寻找的是 awk 等价于:

echo "quick brown fox jumps over sleepy dog" | awk -F'over' '{print };'

您可以在 splits 索引结束时使用负范围偏移(在本例中为 -1)。要从 sleepy 一直到最后一个元素,您可以只使用 $splits[(w)1,-1].

略有不同的方法:

[[ $line =~ "over (.*)" ]]
next_word=$match[1]  # or just $match