我想使用grep并打印前面(左)两个字符串之间匹配的部分,我只想考虑整个string1匹配string2的情况。
红色:我在file1中的字符串
字符串存储在file1和file2中。 我正在使用grep -f来突出字符串。
grep -f file1 file2
file1
ACUGUACAGGCCACUGCCUUGC
CUGCGCAAGCUACUGCCUUGCU
UGGAAUGUAAAGAAGUAUGUAU
....
file1
ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC
CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCUCUGCGCAAATGAAGCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU
答案 0 :(得分:0)
这应该有效:
while read pattern; do sed -n 's/'"${pattern}"'.*//p' file2; done < file1
我们在这里做的是为sed
中的每个模式执行file1
命令。在每个sed命令中,我们检查行中的给定模式,如果有,我们将模式及其后的所有内容替换为空(仅留下模式之前的内容)。
答案 1 :(得分:0)
与RevolutionTech的解决方案类似,您可以提前使用grep
:
while read -r line
do
grep -Po "^\w*(?=$line)" f2
done < f1
这会循环播放file1
的内容,对于每一行,grep
s file2
。
查看前瞻的基本示例:让我们在找到文本hello
之前打印出现的单词:
$ echo "this is aahello" | grep -Po '\w*(?=hello)'
aa
$ while read line; do grep -Po "^\w*(?=$line)" f2; done < f1
ACUGUACGCGCTATACACUGCCUUGC
CUGCGCAAGGGCTCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU