如何从每三行删除一个新行分隔符。 例子:bash-删除 n每三行
输入:
1
name
John
2
family
Grady
3
Tel
123456
输出:
1
name John
2
family Grady
3
Tel 123456
如何从每三行删除一个新行分隔符。 例子:bash-删除 n每三行
输入:
1
name
John
2
family
Grady
3
Tel
123456
输出:
1
name John
2
family Grady
3
Tel 123456
这可能会为你工作(GNU SED):
sed 'n:N;s/\n/ /' file
作为替代使用膏体:
paste -sd'\n \n' file
您能否详细说明'n; N'部分? – 2014-10-09 06:09:54
@AvinashRaj问题说'bash-删除\ n每三行'它不会说用空格替换'\ n'。 – potong 2014-10-09 06:12:59
根据预期输出进行了评论。 – 2014-10-09 06:14:16
假设所有那些你想加入下一个一端与:
(您原问题)线:
1
name:
John
2
family: Grady
3
Tel:
123456
您可以使用sed
为此,有:
sed ':a;/:$/{N;s/\n//;ba}'
的a
是分支标签。检测到模式:$
(冒号在行尾),如果找到N
将把下一行追加到当前行,则使用s/\n//
替换命令删除它们之间的换行符,并使用ba
命令将其分支回标签a
。
为了您编辑问题,你只是想不理会每个三线组的第二和第三线面相结合的内容:
1
name
John
2
family
Grady
3
Tel
123456
用途:
sed '{n;N;s/\n/ /}'
在该命令序列中,n
将输出组中的第一行并将其替换为第二行。然后N
会将第三行附加到第二行,并且s/\n/ /
将在它们之间的换行符在最终输出组合的二三行之前变为空格。
然后它进入下一个三人组,并做同样的事情。
这两个命令都会为它们各自的输入生成所需的输出。
+1为sed命令解释.. – 2014-10-09 06:39:44
如果有四个词,比如'1 SOMETHING name John',我们打算用它们做同样的事情,我们怎么用'n '和'N'? – 2014-10-09 08:36:56
@Mandar,你应该问一个不同的问题,因为它会获得比隐藏在评论中的更多的风险。 – paxdiablo 2014-10-09 08:53:21
awk 'NR%3==2{printf "%s ",$0;next}{print $0}' input.txt
sed 'n;N;s/\n//' file
与空间的使用,以更换新行
输出:
1
name John
2
family Grady
3
Tel 123456
你可以在Perl做到这一点,
$ perl -pe 's/\n/ /g if $. % 3 == 2' file
1
name John
2
family Grady
3
Tel 123456
又一解决方案,在击:用AWK
while read line
do
if [[ $line = *: ]]
then
echo -n $line
else
echo $line
fi
done < input.txt
方式一:
awk '{ printf "%s%s", $0, (NR%3==2 ? FS : RS) }' file
Unix的方式:
$ paste -sd'\n \n' input
输出:
1
name John
2
family Grady
3
Tel 123456
你确定后'你输入样本2'是一致的?另一种解决方案可能是删除所有在':'之后的'\ n'。 – reto 2014-10-09 05:57:56
对不起!我有点昏昏欲睡:D – ahb65 2014-10-09 06:04:14