Filter 使用grep过滤同步条件
我需要创建一个过滤器,它可以过滤掉以下任何字符串:Filter 使用grep过滤同步条件,filter,grep,Filter,Grep,我需要创建一个过滤器,它可以过滤掉以下任何字符串: 少于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 [itemtoremo
- 少于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哪里出了问题吗?
它向我输出一个空白文件。
谢谢 您可以使用正则表达式的
perl
风格,使用[[:alpha:]
组中的字符,并使用^
和$
锚定匹配以开始和结束行:
grep -P '^[[:alpha:]]{3,}$' infile
它产生:
abaca
abradant
abrasive
对于问题的第一部分,以下内容几乎适用于任何grep
grep '^[a-z][a-z][a-z][a-z]*$' infile
对于“升级的问题”,以下内容从指定的输入生成指定的输出(对我的浏览器中显示的空白进行一些假设)
这个正则表达式正好包含两个空白字符,它们是制表符
由于指定的输入现在包含输出中所需的连字符和下划线,因此上面采用了一种简单的方法来处理连字符和下划线。我猜了一下你希望第三和第四列如何处理
这是一个有趣的巧合:
- 所需的所有行的第一列项目都以“-n”xcompile结尾
- 同上,第二列项目以“如-”开头
- 这些是唯一指定下划线或连字符的位置
grep '^[a-z][a-z][a-z][a-z]*-n such_as-[a-z]* [0-9]\.[0-9]* [A-Z]$' input
现在我注意到了其他巧合,比如“hea”作为“such_as-”后面的单词的开头。但也许现在这就足够了?这是可行的:
egrep -v "[^a-zA-Z]" infile | egrep "[a-zA-Z]{3,}" > outfile
为什么输出中排除了abradant?人为错误:检查示例中的编辑。如果我只想将此grep应用于4个选项卡分隔列中的第1列。如何修改此命令以产生所需的结果?上面的问题已经用完整详细的问题进行了修改。
egrep -v "[^a-zA-Z]" infile | egrep "[a-zA-Z]{3,}" > outfile