首页 > 解决方案 > Bash:提取出现多次的两个字符之间的文本

问题描述

我有一个文件,其中包含三元组形式的图的节点和边。每行有 3 个三元组,但有时中间或末尾有文本:

<samplenode> <sampleEdge> <samplenode>
<samplenode> sometimestheristextinbetween<sampleEdge> <samplenode> and sometimes more at the end
<samplenode> <samplereEdge> <samplenode>

我需要一个只打印三元组并忽略中间文本的命令。所以它应该只包含介于两者之间的字符<>

它可以包括<>不包括。没关系,但应该分开。结果可能如下所示:

<samplenode> <sampleEdge> <samplenode>
<samplenode> <sampleEdge> <samplenode> 
<samplenode> <sampleEdge> <samplenode>

我试过了sed,删除了两个模式之间的所有内容(>和之间的所有内容<),但它从来没有按照我想要的方式工作。

有人对我有解决方案吗?也许与grepor awk

问候

标签: bashawksedgrep

解决方案


这是一些使用分隔符的 awk 游戏,使用示例输入进行了测试。

awk -v RS="<" -F">" '{printf $1 (NR%3==1? "\n": " ")}' file

samplenode sampleEdge samplenode
samplenode sampleEdge samplenode
samplenode samplereEdge samplenode

推荐阅读