sed:匹配两行

sed:匹配两行

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

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

我想得到以下信息:

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

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

答案1

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

或者:

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

g如果您要连接两行以上,请使用替换修饰符,例如N;N;N;s/\n/ /g

答案2

看起来这些apt-get行前面有空格。说:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

应该产生期望的结果。

或者,您也可以使用paste

paste -d' ' - - < inputfile

相关内容