我有一个不规则的文件,当我看到 net 时我想加入3行,然后加入接下来的两行
abscc.tech.com
________
________
eaaa.bang.com
________
________
pop.wow.com
________
net self 10.47.250.189
address 10.47.250.189/29
vlan trust_f5_1293
net self 10.47.96.12
address 10.47.96.12/24
vlan vips_inline_1096
________
yuum.bean.com
________
结果应为
abscc.tech.com
________
________
eaaa.bang.com
________
________
pop.wow.com
________
net self 10.47.250.189 address 10.47.250.189/29 vlan trust_f5_1293
net self 10.47.96.12 address 10.47.96.12/24 vlan vips_inline_1096
________
yuum.bean.com
________
我试过
awk '/net/{if (NR!=1)print "";next}{printf $0}END{print "";}' file.txt
但它只是从第一个'网'开始,然后变成了傻瓜。
答案 0 :(得分:2)
您可以使用awk
来匹配以net
开头的行,使用getline()
获取下两行并在打印时打印其他两行默认。
awk '/^net/ { getline first; getline second;
sub(/^[[:space:]]+/,"",first);
sub(/^[[:space:]]+/,"",second);
printf "%s %s %s\n",$0, first, second; next }{ print }' file
答案 1 :(得分:2)
$ awk '/^net/{c=3} c&&c--{sub(/^ +/," "); rec=rec sep $0; if (c>0) next; $0=rec; rec=""} 1' file
abscc.tech.com
________
________
eaaa.bang.com
________
________
pop.wow.com
________
net self 10.47.250.189 address 10.47.250.189/29 vlan trust_f5_1293
net self 10.47.96.12 address 10.47.96.12/24 vlan vips_inline_1096
________
yuum.bean.com
________
如果您需要加入50行而不是3行,请将3
替换为50
。考虑如何使用其他答案来做到这一点。对目标文本块进行进一步操作,引入错误检查,将该块重定向到不同的文件或执行其他任何操作也是微不足道的。
答案 2 :(得分:1)
使用sed
的另一种方法:
sed -e '/^net/{N;s/\n//;N;s/\n//;}'
档案
它搜索模式,以'net'开头,^net
带来下一行N
删除嵌入的换行符s/\n//
为了删除两个新行,它执行两次相同的操作。