sed:匹配两行

Mar*_*ter 12 sed text-processing

我有一个文本文件,其中记录分为两行。我想把它们放在一条线上。记录看起来像这样:

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet
Run Code Online (Sandbox Code Playgroud)

我想得到以下内容:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet
Run Code Online (Sandbox Code Playgroud)

我试过sed,但我无法匹配两行。有什么技巧sed吗,或者有什么更好的工具?

pet*_*rph 13

sed 'N;s/\n/ /'
Run Code Online (Sandbox Code Playgroud)
  • N 将下一个输入行连接到模式空间
  • s/\n/ / 用空格替换分隔行的换行符。

或者:

sed -n 'N;s/\n/ /;/regex/p'
Run Code Online (Sandbox Code Playgroud)
  • -n 禁用自动打印模式空间作为最后一个命令
  • /regex/p 打印匹配正则表达式的行

g如果您连接多于两行,请使用修饰符进行替换,例如N;N;N;s/\n/ /g.


dev*_*ull 6

似乎这些apt-get行前面有一个空格。说:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile
Run Code Online (Sandbox Code Playgroud)

应该产生预期的结果。

或者,您也可以使用paste

paste -d' ' - - < inputfile
Run Code Online (Sandbox Code Playgroud)