我有一个文本文件,其中记录分为两行。我想把它们排成一行。记录看起来像这样:
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