text - 使用 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
变量设置为真值。最后的独立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' '\034' < file | sed $'s/\034$//' | tr '\034' '\n' | od -c
0000000 f i r s t \n s e c o n d \n t h i
0000020 r d
0000022
推荐阅读
- node.js - 如何让机器人在加入服务器时赋予自己自己的角色?例如,mee6 的 mee6 角色
- python-3.x - Discord.py client.get_user 返回无
- javascript - 如何解释 node.js 文档中的方法参数
- activemq-artemis - 拦截消息过期
- c# - 从 C# 连接到 Docker 实例中的 SQL 数据库失败
- python - 如果模式存在,则在python中提取子字符串
- python - prepopulated_fields 导入数据库时不会触发
- php - 使用 laravel 使用 ajax 调用请求未定义
- javascript - 烧瓶 api 和 javascript 的 CORS 问题
- python - 数据框应用方法未更新所有行