在上一行中将n行追加到某个字符

时间:2017-05-10 20:17:48

标签: python linux bash

输入:

[5 8 15 79 5 6  
.  
.  
.   
n 8 6 4 5 ]  
[18 78 18 79 5 6  
.  
.  
.   
n 8 6 78 ]

依旧......

期望的输出:

[5 8 15 79 5 6 . . . . 8 6 4 5 ]  
[18 78 18 79 5 6 . . .  8 6 78 ]

我需要将所有列转换为]到一行,并继续这样做直到文件末尾。

2 个答案:

答案 0 :(得分:1)

听起来您只想在当前行以]结尾时才打印换行符。尝试:

awk '{printf "%s%s", $0, match($0,"]\\s*$") ? "\n" : ""}' input

答案 1 :(得分:1)

使用sed:

$ sed ':a;N;/\]/!ba;s/\n//g' infile
[5 8 15 79 5 6  .  .  .   n 8 6 4 5 ]
[18 78 18 79 5 6  .  .  .   n 8 6 78 ]

说明:

:a        # Label to jump to
N         # Append next line to pattern sapce
/\]/! ba  # If there is no "]", jump to label
s/\n//g   # Remove all newlines (only reached if "]" in pattern space)

如果您想确保]是该行中的最后一个非空白字符,而不仅仅是其中的任何位置,则可以将正则表达式从/\]/更改为/\][[:blank:]]*$/,导致

sed ':a;N;/\][[:blank:]]*$/!ba;s/\n//g' infile