如何获取由索引指定的两个单词之间的文本?

Hel*_*ano 5 text-processing

使用 awk,我可以打印给定索引的单词,如下所示。

$ echo "The quick brown fox jumps over the lazy dog" | awk  '{print $3, $7}'
brown the
Run Code Online (Sandbox Code Playgroud)

但我也想获取指定单词“brown”和“the”之间的文本。所以我希望输出是这样的。

brown fox jumps over the
Run Code Online (Sandbox Code Playgroud)

没有必要专门使用 awk,但是单词的索引和标记化应该与 awk 的索引和标记化相匹配,以与我的 shell 脚本中使用 awk 的其他部分保持一致。

我想过将单词从第一个索引打印到最后一个索引,但这不会保留单词之间的空格。

用一种复杂但更准确的方式来说,我想获取从索引指定的某个单词的开头开始并在另一个索引指定的另一个单词的结尾结束的文本。我怎样才能做到这一点(最好没有 bash 循环)?

Ste*_*itt 7

使用gawk,您可以使用该split()函数来确定字段及其分隔符:

$ echo "The quick brown fox   jumps over the lazy dog" | awk '{ split($0, a, "\\s+", s); for (i = 3; i <= 7 && i <= length(a); i++) printf "%s%s", a[i], (i < 7 ? s[i] : "\n") }'
brown fox   jumps over the
Run Code Online (Sandbox Code Playgroud)