如何将换行符插入到sed行连接中

时间:2016-10-25 00:29:18

标签: awk sed concatenation

我有这段代码:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

获取我的所有输入并创建一条长记录。 我想要的是连接记录一和记录二

这样:

cat testfeed.txt | sed '${H;z;x;s/\n//g;p;};/0$/!{H;d;};/0$/{H;z;x;s/\r//g;}'

变为:

1.

My first line

2.

My Second line

而不是:

1. My First line

2. My Second line

我觉得我应该能够插入换行符,但我对sed的了解最多:(

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您乐意接受awk解决方案,可以将其作为

awk 'NF{getline empty;getline line;printf("%s %s\n",$0,line)}' input-file
1. My first line
2. My Second line

您的input-file正在

$ cat input-file
1.

My first line

2.

My Second line

逻辑很简单。

  • NF{..是为了确保以下操作仅适用于非空行
  • getline empty;getline line;获取行和行+ 1并存储在awk变量中,printf相应地打印变量。

如果您想在每一行后添加换行符,只需在printf中添加另一个'\ n'作为printf("%s %s\n\n",$0,line)

awk 'NF{getline empty;getline line;printf("%s %s\n\n",$0,line)}' input-file
1. My first line

2. My Second line

答案 1 :(得分:0)

$ cat testfeed.txt 
1.

My first line

2.

My Second line

GNU sed

$ sed 'N;N; s/\n\s*\n/ /; N' testfeed.txt 
1. My first line

2. My Second line
  • N;N;再获得两行,总共三行
  • 来自这三行的
  • s/\n\s*\n/ /,用空格替换\n\s*\n的第一次出现...例如,这将匹配包含1.的行的末尾和随后的空行(如果行没有\s个字符,则可以删除\s个字符
  • 最后一个; N会再获得一行,以便下一个匹配将从包含2.
  • 的行开始