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
.
似乎这些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)