抓取起始字符串分隔符和结束字符分隔符之间的所有文本

抓取起始字符串分隔符和结束字符分隔符之间的所有文本

我希望在 Linux 中解析一个文件。基本上,每次该模式[protein=proteinA]出现时,我都想维持proteinA。也就是说,我希望保留这九个字符之间的所有字符:

 [protein=

和一个字符:

]

我希望对文件中的每个模式执行此操作,这将导致输出如下所示:

proteinA
proteinB
proteinC
proteinD

在 Linux 中实现此目的的简单命令是什么?

答案1

一个简单的sed解决方案是

 sed 's/\[protein=\(.*\)]/\1/'

如果输入中的每一行看起来都像,那么上面的命令应该可以正常工作。如果您有任何其他类型的数据,并且您不喜欢从上面获得的结果,那么您需要指定您想要的结果。[protein=something]

答案2

标签可能包含任何文本的通用解决方案是使用以下 sed 命令:

sed -i.bak 's/\[[^=]*=\([^]]*\)]/\1/g' <file to process>

此命令将适用于[tagname=something], 并将删除[tagname=, 和],其中标记名可以是任何内容,而不仅仅是protein

-i.bak将处理您的文件并将原始文件添加到带有.bak扩展名的文件名中。

答案3

你可以直接grep输出你想要的数据:

$ grep -oP '\[protein=\K((?!]).)+(?=])' file

相关内容