Awk 在匹配字符串之前打印部件 我想使用GRIP并打印在两个字符串之间的匹配之前出现的部分,而我只想考虑整个String 1与String 2匹配的情况。p>

Awk 在匹配字符串之前打印部件 我想使用GRIP并打印在两个字符串之间的匹配之前出现的部分,而我只想考虑整个String 1与String 2匹配的情况。p>,awk,sed,grep,Awk,Sed,Grep,红色:文件1中的我的字符串 字符串存储在文件1和文件2中。 我正在使用grep-f高亮显示字符串 grep -f file1 file2 文件1 ACUGUACAGGCCACUGCCUUGC CUGCGCAAGCUACUGCCUUGCU UGGAAUGUAAAGAAGUAUGUAU .... ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCU

红色:文件1中的我的字符串

字符串存储在文件1和文件2中。 我正在使用grep-f高亮显示字符串

grep -f file1 file2
文件1

ACUGUACAGGCCACUGCCUUGC
CUGCGCAAGCUACUGCCUUGCU
UGGAAUGUAAAGAAGUAUGUAU
....
ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC
CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCUCUGCGCAAATGAAGCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU
文件1

ACUGUACAGGCCACUGCCUUGC
CUGCGCAAGCUACUGCCUUGCU
UGGAAUGUAAAGAAGUAUGUAU
....
ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC
CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCUCUGCGCAAATGAAGCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU
这应该起作用:

while read pattern; do sed -n 's/'"${pattern}"'.*//p' file2; done < file1

我们在这里所做的是为file1中的每个模式执行sed命令。在每个sed命令中,我们检查行中的给定模式,如果有,我们将替换模式及其后的所有内容,而不保留模式之前的内容。

与RevolutionTech的解决方案类似,您可以使用grep进行前瞻:

while read -r line
do
    grep -Po "^\w*(?=$line)" f2
done < f1
测验
发布您尝试过的grep命令以及文本形式的示例。为什么不改用sed呢?