【问题标题】:How to use grep to retrieve a string within a line如何使用 grep 检索一行中的字符串
【发布时间】:2018-09-29 23:52:24
【问题描述】:

MacOS、Unix

我正在尝试使用 grep 来隔离一行中的特定 ID,如下所示:

# STOCKHOLM 1.0

#=GS WP_002089484.1/1-154 DE [subseq from] MULTISPECIES: AAC(3)-I family aminoglycoside 3-N-acetyltransferase [Proteobacteria]

WP_002089484.1/1-154 MGIIRTCRLGPDQVKSMRAALDLFGREFGDVATYSQHQPDSDYLGNLLRSKTFIALAAFDQEAVVGALAAYVLPKFEQARSEIYIYDLAVSGEHRRQGIATALINLLKHEANALGAYVIYVQADYGDDPAVALYTKLGIREEVMHFDIDPSTAT
#=GR WP_002089484.1/1-154 PP 9*******************************************************************************************************************************************************98
#=GC PP_cons                 9*******************************************************************************************************************************************************98
#=GC RF                      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//

我只想隔离显示 WP_002089484.1 的部分,但我必须对许多文件执行此操作,其中 ID 始终以“WP_”开头并始终以“.1”结尾。我只想要每个文件中的唯一事件。

我尝试了类似的方法:

grep -o "WP_.\{0,11\}" *.sto >> ProtID

但 ProtID 仍然具有原始文件中的所有信息。

【问题讨论】:

  • 当我运行你的测试文件和 grep 命令时,ProtID 有 3 行,都只有 WP_002089484.1。看起来这几乎就是你想要的,除了重复。 “ProtID 仍然具有原始文件中的所有信息”是什么意思?由于您只附加到 ProtID,您是否可能在开发过程中从未删除过此文件并且旧结果仍然存在?
  • 啊,我弄错了,我没有删除以前的文件,所以它是附加到已经存在的文件中,所以唯一的问题是重复

标签: macos unix grep


【解决方案1】:

如果您只希望每个文件中出现唯一的匹配项,以下命令应该可以帮助您:

grep  -o  "WP_.\{0,11\}" *.sto | sort | uniq

输出将是:

file1.sto:WP_002089484.1
file2.sto:WP_002089484.1

如果你想从结果中删除文件名:

grep  -o  "WP_.\{0,11\}" *.sto | sort | uniq  | grep -o "WP_.\{0,11\}"

在这种情况下,输出将是:

WP_002089484.1
WP_002089484.1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多