bash - 如果在非连续行上以特定字符开头,则删除换行符
问题描述
我有一个文本文件,每隔一行以 % 字符结尾。我想找到模式“% + 换行”并将其替换为“%”。换句话说,我想删除 % 之后的换行符,而不是其他换行符。
例如,我想更改以下内容:
abcabcabcabc%
123456789123
abcabcabcabc%
123456789123
至
abcabcabcabc%123456789123
abcabcabcabc%123456789123
我尝试了以下 sed 命令,但无济于事。
sed 's/%\n/%/g' < input.txt > output.txt
解决方案
默认情况下 sed 不能删除换行符,因为它一次读取一个换行符分隔的行。
在每个 UNIX 框上的任何 shell 中使用任何 awk 来处理任意数量的以 结尾的行,无论是否%
连续:
$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
abcabcabcabc%123456789123
abcabcabcabc%123456789123
并带有连续的%
行:
$ cat file
now is the%
winter of%
our%
discontent
$ awk '{printf "%s%s", $0, (/%$/ ? "" : ORS)}' file
now is the%winter of%our%discontent
推荐阅读
- vb.net - 使用实体 (EF6) 从 BindingSource.List 中删除 DbContext 中的所有位置
- firebase - Flutter - 如何获取当前上下文?
- python - 为什么 OpenCV Python V3.4.2 中有多个类似颜色空间转换的枚举?
- http - 如何让 Firefox 缓存大图像?
- shell - 非法选项 -- xargs shell 命令的命令中的 1
- c# - 代码优先更新数据库使用未指定的 localdb 连接字符串
- r - 具有非唯一测试数据的混淆矩阵级别错误
- c# - 无法将 Unity 脚本附加到游戏对象
- python - 在列表的数据框列中用零替换负数
- html - 在引导程序中的行元素内使用边框