如何从每三行删除换行符分隔符。 例如:
输入:
1
name
John
2
family
Grady
3
Tel
123456
输出:
1
name John
2
family Grady
3
Tel 123456
答案 0 :(得分:3)
这可能适合你(GNU sed):
sed 'n;N;s/\n//' file
用空格替换换行:
sed 'n:N;s/\n/ /' file
作为替代使用粘贴:
paste -sd'\n \n' file
答案 1 :(得分:2)
假设您要使用:
(您的原始问题)加入下一个结尾的所有行:
1
name:
John
2
family: Grady
3
Tel:
123456
您可以使用sed
来执行此操作:
sed ':a;/:$/{N;s/\n//;ba}'
a
是分支标签。检测到模式:$
(行尾的冒号),如果找到,N
将下一行附加到当前行,则使用s/\n//
替换命令删除它们之间的换行符,并使用a
命令将其分支回标签ba
。
对于已编辑的问题,您只想将每个三线组的第二行和第三行合并而不管内容如何:
1
name
John
2
family
Grady
3
Tel
123456
使用:
sed '{n;N;s/\n/ /}'
在该命令序列中,n
将输出组中的第一行并将其替换为第二行。然后N
会将第三行追加到第二行,s/\n/ /
会将它们之间的换行符更改为空格,然后再输出合并后的两行。
然后它进入下一组三个并做同样的事情。
这两个命令都会为各自的输入生成所需的输出。
答案 2 :(得分:2)
awk 'NR%3==2{printf "%s ",$0;next}{print $0}' input.txt
输出:
1
name John
2
family Grady
3
Tel 123456
答案 3 :(得分:2)
您可以在Perl中执行此操作,
$ perl -pe 's/\n/ /g if $. % 3 == 2' file
1
name John
2
family Grady
3
Tel 123456
答案 4 :(得分:2)
使用AWK的一种方式:
awk '{ printf "%s%s", $0, (NR%3==2 ? FS : RS) }' file
答案 5 :(得分:0)
另一个解决方案,在Bash:
while read line
do
if [[ $line = *: ]]
then
echo -n $line
else
echo $line
fi
done < input.txt
答案 6 :(得分:0)
Unix方式:
$ paste -sd'\n \n' input
输出:
1
name John
2
family Grady
3
Tel 123456