gpt4 book ai didi

使用 grep 过滤同时条件

转载 作者:行者123 更新时间:2023-12-01 22:50:53 27 4
gpt4 key购买 nike

我需要创建一个过滤器来过滤掉任何符合以下条件的字符串:

  • 少于3个字符
  • 包含数字或符号(即任何不属于拉丁字母的项目)

例子:输入文件:

5-hydroxy-3-methylglutaryl-coenzyme_a_reductase
5-hydroxytryptamine
a
a
a
aa
abaca
abo_antibodies
abradant
abrasive

输出文件:

abaca
abradant
abrasive

我一直在查看 grep 选项:

grep -v [itemtoremove] [inputfile] > [outputfile]

这似乎可以解决问题。但是,它只会单独删除每个项目,这意味着要从文件中删除我需要的所有内容,我必须不断运行此脚本。

有没有人有解决方案,以便我可以使用一个 grep(或其他更高效的命令行)过滤所有必要的内容?

更新问题

下面有几个很好的解决方案可以解决这个问题。

但是,我想将相同的应用到具有 4 个制表符分隔列的输入文件。

我已经尝试过以下修改:

grep '^[a-z][a-z][a-z][a-z]-n$' input

现在输入如下:

a-n such_as-handheld-n  6.4623  A
abaca-n such_as-head-n 2.5586 A
abo_antibodies-n such_as-headphone-n 8.0794 A
abrasive-n such_as-healthcare-n 5.2845 A
function-n such_as-hearing-n 9.5367 A

我们想要以下输出:

abaca-n such_as-head-n  2.5586  A
abrasive-n such_as-healthcare-n 5.2845 A
function-n such_as-hearing-n 9.5367 A

有人可以告诉我修改后的 grep 哪里出错了吗?它输出一个空白文件。谢谢!

最佳答案

对于问题的第一部分,以下内容应该适用于几乎所有 grep。

grep '^[a-z][a-z][a-z][a-z]*$' infile

对于“升级的问题”,以下内容从指定的输入生成指定的输出(对我的浏览器中出现的空白做出一些假设)。

grep '^[a-z-][a-z-][a-z-][a-z-]*-n  [a-z_-]*-n  [0-9]\.[0-9]*   [A-Z]$' infile

这个正则表达式恰好包含两个空白字符,它们是制表符。

由于指定的输入现在包含输出中所需的连字符和下划线,因此上面采用了一种简单的方法来处理连字符和下划线。我对您希望如何处理第三列和第四列进行了一些猜测。

这是一个有趣的巧合:

  • 您想要的所有行的第一列项目都以“-n”xcompile 结尾
  • 同上以“such_as-”开头的第二列项目
  • 那些是唯一指定下划线或连字符的地方

所以也许您希望表达式看起来更像这样:

grep '^[a-z][a-z][a-z][a-z]*-n  such_as-[a-z]*  [0-9]\.[0-9]*   [A-Z]$' input

现在我注意到其他巧合,例如“hea”作为“such_as-”之后单词的开头重复出现。但也许这就足够了?

关于使用 grep 过滤同时条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19375887/

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