我有一個文字文件,其中記錄分為兩行。我想把它們排成一行。記錄看起來像這樣:
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