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

相關內容