使用sed删除文本文件最后一行中的新行



我想使用sed删除文本文件最后一行中的新行。例如,输入如下:

1
1
1
1
1
1

我希望得到这样的输出,在文本文件的末尾没有任何新行:

1
1
1
1
1
1

这可能适合您(GNU sed):

sed -z 's/n+$//' file

如果没有空字符,这将删除文件末尾的换行符。

注意:正常使用sed,即不使用-z选项(该选项会将文件放入内存),将在sed命令对其进行操作之前删除所有换行符。

使用sed

sed '/^$/d' input_file

这将删除所有空行

从一些测试数据开始:

$ printf "%sn" {a..e} "" "" | cat -n
1  a
2  b
3  c
4  d
5  e
6
7

我会这样处理这个问题:反转文件,删除空行在顶部,然后重新反转文件

$ printf "%sn" {a..e} "" "" | tac | awk 'NF && !p {p=1}; p' | tac | cat -n
1  a
2  b
3  c
4  d
5  e

NF是表示"此记录中字段数"的awk变量。p是我用来指示何时开始打印的变量。当NF第一次非零时,我们将p变量设置为真值。最后的独立p触发默认操作来打印记录。


删除最后一行的换行符是另一回事。

给定这个文件:

$ cat > file
first
second
third
$ od -c file
0000000   f   i   r   s   t  n   s   e   c   o   n   d  n   t   h   i
0000020   r   d  n
0000023

可以使用perl:

$ perl -i -0777 -ne 's/n+$//; print' file
$ od -c file
0000000   f   i   r   s   t  n   s   e   c   o   n   d  n   t   h   i
0000020   r   d
0000022

tr将换行符转换为其他字符,sed删除尾随字符

$ tr 'n' '34' < file | sed $'s/34$//' | tr '34' 'n' | od -c
0000000   f   i   r   s   t  n   s   e   c   o   n   d  n   t   h   i
0000020   r   d
0000022

相关内容

  • 没有找到相关文章

最新更新