【问题标题】:Print part before matched string打印匹配字符串之前的部分
【发布时间】:2014-09-28 07:22:52
【问题描述】:

我想使用 grep 并打印两个字符串之间匹配之前(左)的部分,我只想考虑整个 string1 与 string2 匹配的情况。

红色:file1 中的字符串

字符串存储在 file1 和 file2 中。 我正在使用 grep -f 来突出显示字符串。

grep -f file1 file2

文件1

ACUGUACAGGCCACUGCCUUGC
CUGCGCAAGCUACUGCCUUGCU
UGGAAUGUAAAGAAGUAUGUAU
....

文件1

ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC
CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCUCUGCGCAAATGAAGCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU

【问题讨论】:

  • 发布您尝试的 grep 命令以及文本形式的示例。
  • 你为什么不改用sed

标签: awk sed grep


【解决方案1】:

这应该可行:

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

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

【讨论】:

    【解决方案2】:

    与 RevolutionTech 的解决方案类似,您可以使用grep 向前看:

    while read -r line
    do
        grep -Po "^\w*(?=$line)" f2
    done < f1
    

    这将遍历file1 的内容,并且对于每一行,greps 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
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2019-10-18
      • 2019-04-02
      • 2013-10-10
      • 1970-01-01
      相关资源
      最近更新 更多