处理文本,我需要每两行删除换行符。
示例文本:
this is line one
and this is line two
the third and the
fourth must be pasted too
期望的输出:
this is line one and this is line two
the third and the fourth must be pasted too
我尝试了一个while
循环,但 while 循环是不好的做法。是否可以使用tr
或任何其他命令来完成此操作?
答案1
paste
(也是一个标准的 POSIX 简单实用程序,例如tr
)是您的工具。
假设您希望将这些换行符替换为空格,而不仅仅是已删除如您的样本中所示:
paste -d ' ' - - < file
或者:
paste -sd ' \n' file
如果您确实希望将其删除,请替换' '
为。'\0'
要替换 3 个中的 2 个:
paste -sd ' \n' file
3 中的 1,从第二个开始:
paste -sd '\n \n' file
等等。
另一个好处paste
是它不会留下未终止的线路。例如,如果您删除每一个文件中的换行符(与tr -d '\n' < file
或 一样tr '\n' ' ' < file
),最终根本没有任何行,因为行需要以换行符终止。因此,通常最好使用paste
它(如paste -sd '\0' file
或paste -sd ' ' file
),这将添加有效文本所需的尾随换行符。
答案2
与现代GNU sed
sed -rz 's/\n([^\n]*\n)/ \1/g' sample.text
和awk
awk '{getline line2;print $0, line2}' sample.text
答案3
sed
为此使用如下所示:
SHW@SHW:/tmp $ cat a
this is line one
and this is line two
the third and the
fourth must be pasted too
SHW@SHW:/tmp $ sed 'N;s/\n/ /' a -i
SHW@SHW:/tmp $ cat a
this is line one and this is line two
the third and the fourth must be pasted too
答案4
另一种方法是使用xargs
:
$ < txt xargs -d '\n' -n 2 echo
this is line one and this is line two
the third and the fourth must be pasted too
在哪里
$ cat txt
this is line one
and this is line two
the third and the
fourth must be pasted too
虽然,这个解决方案相当过度,因为echo
每行都会执行一个进程......因此,除了玩具示例之外,基于 awk/sed 或类似的解决方案应该是首选。