我有一个 hosts file ,我需要使用Linux标准命令将多行组合成一行;从这开始:
127.0.0.1 name1
127.0.0.1 name2
127.0.0.1 name3
...
127.0.0.1 nameN
我想要这个:
127.0.0.1 name1 name2 name3
127.0.0.1 name4 name5 name6
...
127.0.0.1 ... nameN
IP地址始终相同,我可以轻松删除它以简化工作;该文件可以达到30K +行,所以我的目标是使用尽可能少的资源减少其大小(我在使用OpenWRT的路由器上工作)。 使用 tail 和 head 我可以获得一组行,但后来我不知道如何将它们放在一行(substite \ n带有空格的似乎不起作用。)
答案 0 :(得分:1)
这个怎么样:
(sed 's/127.0.0.1 //' | fmt -w 25 | sed 's/^/127.0.0.1 /') < inputfile > outputfile
答案 1 :(得分:1)
这是一个sed
调用,在一行中总是最多有三个名字:
sed -e '1~3 N' -e 's/\n127.0.0.1//g' -e '2~3 N' -e 's/\n127.0.0.1//g' in >out
这适用于GNU sed,我还没有尝试过任何其他sed版本:
voss@seehuhn [~] cat x
127.0.0.1 a
127.0.0.1 b
127.0.0.1 c
127.0.0.1 d
127.0.0.1 e
127.0.0.1 f
127.0.0.1 g
127.0.0.1 h
voss@seehuhn [~] sed -e '1~3 N' -e 's/\n127.0.0.1//g' -e '2~3 N' -e 's/\n127.0.0.1//g' x
127.0.0.1 a b c
127.0.0.1 d e f
127.0.0.1 g h