Unix Bash Shell脚本中的懒惰匹配

3
我刚开始学习Shell脚本和Unix命令,尝试着在文件中进行模式匹配,但一直没有得到想要的输出结果。下面是示例文本(已修正):
"hello
how
are
you
right
now
and
hey how
you
doing
thanks
see
you
and
ask
me if I
am
doing
okay"

期望输出:

hey how
you
doing

我尝试使用在这里找到的多个针对sed、grep或awk类似问题的答案,但我仍然看到了以下输出:

how
are
you
right
now
and
hey how
you
doing
thanks
see
you
and
ask
me if I
am
doing

我想要对单词“how”和“doing”之间的行执行一次惰性匹配,并将这些行(包括它们自己)打印出来(最好能解释如何使用此解决方案将返回的文本分配给shell脚本中的变量)

提前感谢

编辑


1
我不确定使用“懒惰匹配”这个术语是否是一个好主意。至少对于熟悉正则表达式的人来说,你实际得到的结果与how.*?doing的匹配结果相同。 - Aaron
1
尝试使用awk: awk '/hey/,/doing/' - Sudosu0
1个回答

2
我只想在单词“how”和“doing”之间进行懒惰匹配,并打印它们之间的行。您可以使用以下的awk命令:
awk 'p{s = s ORS $0} /how$/{p=1; s=$0} p && /doing$/{print s; p=0}' file

hey how
you
doing

谢谢您的回答。如果可以的话,我还有几个问题。如果我的原始文本看起来像这样:code "hello how are you right now and hey how you doing thanks see you and ask me if I am doing okay" code而我想从我的OP中看到相同的期望输出,该怎么办? - wicke_s
不要在注释中提供数据,因为它会失去格式。最好编辑您的问题并添加此示例数据以及预期输出。 - anubhava
刚刚用新的源代码编辑了我的问题。再次感谢。 - wicke_s
即使针对您的更新输出,这个命令也将产生合理的输出。 - anubhava
1
谢谢,你说得对... 你的解决方案也适用于新的文本字符串。 - wicke_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接