我希望在 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