【问题标题】:Lazy match in unix bash shell scriptunix bash shell 脚本中的延迟匹配
【发布时间】:2020-01-17 19:22:28
【问题描述】:

我是 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 脚本中的变量)

提前致谢

编辑

【问题讨论】:

  • 我不确定使用术语惰性匹配是否是个好主意。至少来自熟悉正则表达式的人,您的实际结果与 how.*?doing 将产生的结果相匹配。
  • 尝试使用 awk awk '/hey/,/doing/'

标签: bash shell awk sed grep


【解决方案1】:

我只想在单词“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“你好,你现在好吗,嘿,你过得怎么样,谢谢看到你,问我是否还好”code,我希望看到相同的期望输出我的操作
  • 您无法在 cmets 中提供数据,因为它会丢失格式。最好编辑您的问题并添加具有预期输出的示例数据。
  • 刚刚用新的源文本编辑了我的问题。再次感谢
  • 即使对于您更新的输出,此命令也会产生合理的输出。
  • 谢谢,你是对的......你的解决方案也适用于新的文本字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多