sed - 如何避免sed中的最后一个换行符?
问题描述
我想删除文件的最后一部分,从遵循特定模式的行开始,包括前面的 newline。
因此,在“STOP”处停止,以下文件:
keep\n
STOP\n
whatever
应该输出:
keep
没有尾随换行符。
我试过这个,逻辑似乎有效,但似乎 sed 每次打印缓冲区时都会添加一个换行符。我怎样才能避免这种情况?当 sed 不操作缓冲区时,我没有这个问题(即,如果我删除 STOP,sed 在文件末尾输出“whatever”而没有换行符)。
printf 'keep
STOP
Whatever' | sed 'N
/\nSTOP/ {
s/\n.*$//
P
Q
}
P
D'
我正在尝试编写一个 git 清理过滤器,并且每次提交时都不能添加新的换行符。
解决方案
这可能对您有用(GNU sed):
sed -z 's/\nSTOP.*//' file
该-z
选项将整个文件放入内存中,并且替换命令从第一个换行符中删除文件的其余部分,然后是STOP
.
推荐阅读
- python - 使用 django、css 和 html 从链接创建弹出菜单
- reactjs - React FontAwesome 图标不喜欢 Material-UI 工具提示
- swift - 需要在我的应用程序中提供一些演示数据,它使用领域作为数据库
- r - R- 子集或打印 5x14 数据帧中所有可能的列对
- vue.js - Firefox 触摸模拟器不会在 Vue.js 中触发 mouseover 事件
- arrays - 如何在点击时对 JSON 数组进行排序?
- ansible - 如何在 Ansible 中添加不同主机的变量
- next.js - NextJS[next-i18next] - 从数据库(DB)导入翻译
- node.js - Chromium (V8) 与 Firefox (SpiderMonkey) 访问未定义属性时出错
- javascript - 在 React Native 中使用 Momentjs 计算预订结束前的剩余时间