使用grep命令查找两个字符串中的任意一个,而不改变行的顺序。

16 浏览
0 Comments

使用grep命令查找两个字符串中的任意一个,而不改变行的顺序。

我确定这个问题被问过,但我找不到答案,所以对于重复我表示歉意。

我想使用grep或egrep找到每一行中包含' P '或' CA '的行,并将它们导入到一个新文件中。我可以很容易地使用其中之一来实现:

egrep ' CA ' all.pdb > CA.pdb

或者

egrep ' P ' all.pdb > P.pdb

我对正则表达式还不熟悉,所以我不确定'或'的语法。

更新:

输出行的顺序很重要,即我不希望输出按照匹配的字符串进行排序。这是一个文件的前8行的例子:

ATOM 1 N THR U 27 -68.535 88.128 -17.857 1.00 0.00 1H5 N

ATOM 2 HT1 THR U 27 -69.437 88.216 -17.434 0.00 0.00 1H5 H

ATOM 3 HT2 THR U 27 -68.270 87.165 -17.902 0.00 0.00 1H5 H

ATOM 4 HT3 THR U 27 -68.551 88.520 -18.777 0.00 0.00 1H5 H

ATOM 5 CA LYS B 122 -116.643 85.931-103.890 1.00 0.00 2H2B C

ATOM 6 P THY J 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 P

ATOM 8 HB THR U 27 -68.543 88.566 -15.171 0.00 0.00 1H5 H

ATOM 9 CA LYS B 122 -116.643 85.931-103.890 1.00 0.00 2H2B C

ATOM 10 P THY J 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 P

ATOM 11 HB THR U 27 -68.543 88.566 -15.171 0.00 0.00 1H5 H

ATOM 12 C SER D 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 C

ATOM 13 OP1 SER D 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 O

我希望这个例子的结果文件是:

ATOM 5 CA LYS B 122 -116.643 85.931-103.890 1.00 0.00 2H2B C

ATOM 6 P THY J 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 P

ATOM 9 CA LYS B 122 -116.643 85.931-103.890 1.00 0.00 2H2B C

ATOM 10 P THY J 2 -73.656 70.884 -7.805 1.00 0.00 DNA2 P

0
0 Comments

问题的出现原因:从内容中可以看出,问题是关于如何使用grep命令找到包含两个字符串中任意一个的行,同时保持行的顺序不变。根据提问者的回答,可以看出他们已经尝试过了一些方法,但是并没有得到满意的结果。

解决方法:从内容中我们可以得出以下几种解决方法:

1. 使用grep命令,并使用'|'符号表示"或"的关系,同时需要对'|'进行转义,以告诉grep它具有特殊含义。

2. 使用扩展的grep命令,通过-E选项来实现上述功能。

3. 使用awk命令,通过指定正则表达式来匹配包含任意一个字符串的行。

4. 对于给定的示例输入,可以使用awk命令来检查字符串是否在第三列中。

根据问题中提供的示例测试结果,可以看出以上几种方法都能够正确找到包含任意一个字符串的行。

此外,还有一些对问题的相关性质的讨论,但并没有直接与解决方法相关。

0
0 Comments

问题原因:

出现这个问题的原因是用户想要使用grep命令在指定目录中查找包含两个字符串之一的行,但是希望保持行的顺序不变。

解决方法:

要解决这个问题,可以使用以下的grep命令:

grep 'string1\|string2' -Er /path_to_your_dir/ > /tmp/grep.log

上面的命令将在指定目录中搜索包含字符串"string1"或"string2"的行,并将结果输出到/tmp/grep.log文件中。

如果需要进行不区分大小写的搜索,可以将命令中的"-Er"替换为"-Eri"。

如果只想搜索特定扩展名的文件,可以使用以下命令:

grep 'string1\|string2' -Er --include=*.extension /path_to_your_dir/ > /tmp/grep.log

将"extension"替换为要搜索的文件的扩展名。

希望以上内容对您有所帮助。

0
0 Comments

在Mac OS Ventura上,可以使用grep命令来查找两个字符串,而不改变行的顺序。具体的命令如下:

grep -e ' CA ' -e ' P ' all.pdb > CA.pdb

根据grep的man页面的说明,-e选项用于指定搜索输入时使用的模式,如果输入行与指定的任何模式匹配,则选择该行。当使用多个-e选项来指定多个模式时,或者当模式以破折号(“-”)开头时,此选项最有用。

因此,通过使用-e选项,我们可以在grep命令中指定多个模式,以便同时查找" CA "和" P "字符串。在上述命令中,grep将在all.pdb文件中查找包含" CA "或" P "的行,并将结果存储在CA.pdb文件中。

这种方法的好处是我们可以在不改变行的顺序的情况下,同时查找多个字符串。这对于需要同时满足多个条件的情况非常有用。

因此,使用grep命令的-e选项可以很方便地解决需要同时查找两个字符串而不改变行顺序的问题。

0