使用 sed 删除文本文件最后一行中的新行
Removing the new line in the last line of a text file using sed
我想使用 sed 删除文本文件最后一行中的新行。例如输入如下:
1
1
1
1
1
1
我想要这样的输出,文本文件末尾没有任何新行:
1
1
1
1
1
1
从一些测试数据开始:
$ printf "%s\n" {a..e} "" "" | cat -n
1 a
2 b
3 c
4 d
5 e
6
7
我会这样解决问题:反转文件,删除空行
置顶,然后重新倒档
$ printf "%s\n" {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
变量设置为真值。末尾的standalone 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' '4' < file | sed $'s/4$//' | tr '4' '\n' | od -c
0000000 f i r s t \n s e c o n d \n t h i
0000020 r d
0000022
这可能适合您 (GNU sed):
sed -z 's/\n\+$//' file
如果没有空字符,这将删除文件末尾的换行符。
N.B。 sed 的正常使用,即没有 -z
将文件插入内存的选项,将在 sed 命令对其执行操作之前删除任何换行符。
使用sed
sed '/^$/d' input_file
这将删除所有空行
我想使用 sed 删除文本文件最后一行中的新行。例如输入如下:
1
1
1
1
1
1
我想要这样的输出,文本文件末尾没有任何新行:
1
1
1
1
1
1
从一些测试数据开始:
$ printf "%s\n" {a..e} "" "" | cat -n
1 a
2 b
3 c
4 d
5 e
6
7
我会这样解决问题:反转文件,删除空行 置顶,然后重新倒档
$ printf "%s\n" {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
变量设置为真值。末尾的standalone 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' '4' < file | sed $'s/4$//' | tr '4' '\n' | od -c
0000000 f i r s t \n s e c o n d \n t h i
0000020 r d
0000022
这可能适合您 (GNU sed):
sed -z 's/\n\+$//' file
如果没有空字符,这将删除文件末尾的换行符。
N.B。 sed 的正常使用,即没有 -z
将文件插入内存的选项,将在 sed 命令对其执行操作之前删除任何换行符。
使用sed
sed '/^$/d' input_file
这将删除所有空行