去掉文件末尾的换行符, 怎么做最方便?

2012-03-27 00:01:24 +08:00
 013231
现在有一批文件, 需要检测文件末尾, 如果末尾是换行符('\n'), 就把那个换行符删除.
为了实现这个目的, 怎样做最方便?
14159 次点击
所在节点    问与答
32 条回复
Muninn
2012-03-27 00:05:49 +08:00
ue之类的编辑器替换
甚至word都能替换
RustingSword
2012-03-27 00:09:43 +08:00
sed
gujiaxi
2012-03-27 00:21:44 +08:00
sed
013231
2012-03-27 00:32:38 +08:00
@gujiaxi @RustingSword sed应该怎么做? 就算没有换行符, sed输出一行时也会加上一个换行符. 如何禁止sed自动添加换行符?
013231
2012-03-27 00:35:57 +08:00
@yuhuofeihe @Muninn 我需要一个自动化的解决方案.
66450146
2012-03-27 00:39:34 +08:00
013231
2012-03-27 00:52:28 +08:00
@66450146 此命令对文件末尾的'\n'无效.
Muninn
2012-03-27 01:24:37 +08:00
汗...我还没见过到研究sed层次的人不会做这个...
chone
2012-03-27 02:02:07 +08:00
不用sed其他任意一种可以用正则的方式总行吧。
yuhuofeihe
2012-03-27 08:31:30 +08:00
首选word~
lackrp
2012-03-27 09:36:28 +08:00
cat <filename> | perl -pe 'chop if eof'
why
2012-03-27 10:19:27 +08:00
正则表达式
013231
2012-03-27 18:46:35 +08:00
@Muninn 不是不会, 而是想得到一种简单而优雅的方法.
@chone 并非如此. 我本想用vim脚本来解决:
G
:s/\n//
:wq
然而, ":s/\n//"只对文件中间的'\n'有效, 对文件末尾的'\n'无效. "/\n"可以查找到文件末尾的'\n', ":s/\n//"却无法将其替换, 但也不提示"Pattern not found".
@lackrp 谢谢, perl处理文本果然强大. 我熟悉的语言中没有一种可以如此简单的解决这个问题.
lackrp
2012-03-27 19:36:04 +08:00
@013231 我自己也不会,google到的 :)
Muninn
2012-03-27 20:55:19 +08:00
Perl那个的确够简洁
vi是可以实现的,但是稍微麻烦,需要预先知道有多少行
vi里J可以合并下一行 有多少行就用一个数字跟上J就可以了

哎呀我晕了 vi不用那么麻烦 明明:%s/\n//g 就搞定了

sed也是可以的 这个我以前用过
sed ':a N;s/\n//g;ta'
最简单的貌似是tr啊
tr -d '\n'
013231
2012-03-27 21:20:35 +08:00
@Muninn 我的需求是: 如果文件的**最后一个**字符是'\n', 那么删除它. 不是删除文本中的全部'\n'.
在vim中使用s/\n//是无法删除**最后一行**的'\n'的.
sed中用N指令读取多行再替换'\n'同样无法解决**最后一行**的'\n'问题.
anuxs
2012-03-27 21:22:36 +08:00
有一批文件?
写个脚本,把所有行串成一串字符就行了。跳出常规思维吧,别想着“去掉”,同志们。
013231
2012-03-27 21:46:36 +08:00
@lackrp 是**文件末尾**的'\n'. 您不妨个脚本试试, 可能没有您所想的那么简单. 这个帖子迄今为止还没有一个可用的脚本.
@anuxs 又测试了一下, 那个perl脚本是有问题的. 它的作用是删除文件末尾的字符, 无论它是不是'\n'.
Muninn
2012-03-27 21:49:13 +08:00
抱歉 看错了.
Muninn
2012-03-27 22:03:57 +08:00
vi的话
G
k
J
x
可以...

不然想要判断出文件末尾的属性,我估计只能用python和perl了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/30633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX