【发布时间】:2021-02-13 07:46:57
【问题描述】:
我在 CentOS 下的一个文件中有这些:
real1 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
real2 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
real3 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
173corr 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
512corr 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
513corr 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
虽然每个块可能包含多个子内容,但有两个块“real”和“corr”,即real1、real2 等。
我想加入每个块的子内容。输出将如下所示:
real1 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
173corr 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
要在Editplus中完成此操作,以真实块为例,我需要突出显示整个真实块,并找到所有出现的\nreal\d+\n并替换为\t\t。
挑战是:
-
如何在 sed 中突出显示多行。例如,从第 5 行到第 10 行有一个实际块,从 30 到 50 有另一个实际块。每个实际块将突出显示,并在 Editplus 中逐块执行相同的替换。我不知道 sed 是否可以一次完成所有操作。如果不是,指定并在每个块上执行替换即可。
-
每个子内容的标题为名称+数字格式,即
real1、real2等。所以我在 CentOS 上的试用版中添加了\d+,但它似乎不起作用。
我知道这是一个非常复杂的问题。我只是希望 sed 可以解决问题。
【问题讨论】:
-
名字有关系吗?您需要它并将它们与正确的 bin 相关联,必须有相同数量的子块。否则,它毫无意义。如果关系与计数有关,最好将块的每个名称匹配到单独的数组中,然后根据 index 匹配它们?
-
你的
real\d+和\d+corr行在文件中吗?