我的文本文件(数据库输出)包含太多换行符,所以我必须删除部分换行符(但不是全部)
我设法手动完成,但行数太多(数千),因此自动化解决方案会有所帮助。
目的是最后我只有文本文件中以数字开头的行,所有其他行都应附加到前一行(最后一行以数字开头)
代码应该做什么:
(C-a)
的开头,然后在之前删除换行(就像点击backspace
)这应该很容易,但我不知道这么做。
Emacs的解决方案会有所帮助,但基本上我在CYGWIN中可以做的任何事情也会非常有帮助。
答案 0 :(得分:1)
因此,目标是删除所有未紧跟数字的换行符。 sed的一种方法:
sed -i ':a $!{N; ba}; s/\n\+/\n/g; s/\n\([^0-9]\)/\1/g' filename
这会将整行读入模式空间,用一个替换多个换行符的所有序列,然后删除所有不包含数字的换行符。
附录:啊,Cygwin。警告:代码实际上是假定UNIX行结尾。要使其适用于Windows行结尾 1 的文件,这可能对您很重要,请使用
sed -i ':a $!{ N; ba; }; s/\(\r\n\)\+/\r\n/g; s/\r\n\([^0-9]\)/\1/g' filename
\r\n
而不是\n
也是如此。对于具有混合行结尾的文件,请使用
sed -i ':a $!{ N; ba; }; s/\(\r\?\n\)\+/\n/g; s/\n\([^0-9]\)/\1/g' filename
(或在处理文件之前使用dos2unix
/ unix2dos
。)
1 当从UNIX路径打开文件或涉及管道且月亮是隆起时,取决于Cygwin设置。 Cygwin中行结尾的处理是convoluted and confusing,一般来说,在使用Cygwin工具处理文件之前将文件转换为UNIX行结尾并不是一个糟糕的方法,然后将其转换回来。