我有这段代码:
[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的了解最多:(
任何帮助都将不胜感激。
答案 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.