gpt4 book ai didi

awk - 如何找到与模式匹配的文本?

转载 作者:行者123 更新时间:2023-12-03 16:56:37 24 4
gpt4 key购买 nike

注意:这不是任何现有问题的重复,它旨在说明为什么这样一个极其常见且看似简单的问题无法回答,并提供有关发布此类问题的人如何修改它们以使其可回答的指导,因此我们不必继续提供几乎每天都在评论中提供相同的指导,可以改为引用。
给定以下输入文件:

foo
o.b
bar
我需要输出与模式匹配的所有行 o.b所以我的预期输出是:
o.b
我试过 awk '"o.b"' file但是输出所有行(添加这部分是为了避免提示没有在问题中发布尝试的解决方案)。

最佳答案

虽然从表面上看,这似乎是一个有明显答案的简单问题,但实际上并不是因为两个因素:

  • pattern不明确 - 我们不知道 OP 是要进行正则表达式匹配还是字符串匹配,以及
  • match模棱两可 - 我们不知道 OP 是否想要在每一行上进行完全匹配(为了简单起见,考虑行和记录同义词)还是对特定子字符串(例如“单词”或字段)进行完全匹配。或每行或其他部分的部分匹配。

  • 这些中的任何一个都会从发布的样本输入中产生预期的输出:
  • awk '/o.b/' file
  • awk '/^o.b$/' file
  • awk 'index($0,"o.b")' file
  • awk '$0 == "o.b"' file

  • 但我们不知道哪个是正确的,如果有的话,我们只知道它们从问题中的特定样本输入中产生了预期的输出。
    考虑如果 OP 真实数据包含这样的附加字符串,而不仅仅是问题中显示的最小示例,每个人的行为会如何:
    $ cat file
    foo
    foo.bar
    foobar
    o.b
    orb
    bar
    那么这里有 4 个可能的答案,根据问题的样本输入,它们都将产生预期的输出,但在输入略有不同的情况下会产生非常不同的输出,我们只是无法从问题中知道哪个输出是正确的OP 需要:
  • 部分正则表达式匹配:
  • $ awk '/o.b/' file
    foo.bar
    foobar
    o.b
    orb
  • 全行正则表达式匹配:
  • $ awk '/^o.b$/' file
    o.b
    orb
  • 部分字符串匹配:
  • $ awk 'index($0,"o.b")' file
    foo.bar
    o.b
  • 全行字符串匹配:
  • $ awk '$0 == "o.b"' file
    o.b
    当您考虑针对每行上的特定子字符串进行全字、全字段和其他类型的匹配时,还有各种其他可能性也可能是正确答案。
    因此,每当您询问有关将某些文本与其他文本进行匹配的问题时:
  • 永远不要使用这个词 pattern而是使用 stringregexp ,无论您是指哪个,以及
  • 始终说明您希望匹配是在整行还是在行的一部分或完整的子字符串(例如单词或字段)或行的子字符串的一部分。

  • 否则,您最终可能会得到一个您没有的问题的解决方案,该解决方案可能效率低下和/或完全错误,即使它为您现在运行的某些特定输入集产生预期输出,它也很可能会回来在稍后针对其他一些输入集运行时咬你。
    另见 https://unix.stackexchange.com/a/631532/133219有关此问题的更多示例。

    关于awk - 如何找到与模式匹配的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65621325/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com