如何使用shell脚本删除文本文件中最后一个换行符?

Chris1489 2013-08-30 11:55:02
小弟需要自动对一个文本文件进行处理,需要删除最后一行的换行符。但是小弟对sed和awk的使用还只是入门级,GOOGLE了N久没有找到一个有效的解决办法,只好麻烦大虾们帮小弟这个忙了。。

原文件类似这样:
123458|5785|3315
345436|5636|9921


文件中第二行为最后一行,这一行的最后有一个换行符,导致实际文件的行数为3,第三行为空行。
我现在需要使用shell脚本删除掉这最后的一个空行,达到的目的就是文件有效记录数为2,文件也只有2行。

之前尝试过sed删除最后一行,但是好像sed是不能删除最后一个换行符的?反正使用后貌似是把我的第二行记录整个给删掉了;也尝试过删除最后一个字符,结果把我的第二行记录的最后一个字符给删掉了。反正怎么都无法达到我的目的。

只好请教各位高手了,希望能够解决我的问题,先谢了!
...全文
9299 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chris1489 2013-09-10
  • 打赏
  • 举报
回复
引用 9 楼 shiquxinkong 的回复:
明白你的意思了。一下是我的实现,我也刚接触这东西,有点繁琐。 [root@localhost wwe]# cat -E good $ good$ [root@localhost wwe]# 1.借助tr命令 [root@localhost wwe]# tail -n1 good | tr -d '\n' >> oo [root@localhost wwe]# cat -E oo good[root[/color]@localhost wwe]# 2.将good中的最后一行删除 [root@localhost wwe]# sed -i '$d' good [root@localhost wwe]# cat -E good $ 3.将oo中的处理了换行字符的结果写入good [root@localhost wwe]# sed -i 'r oo' good [root@localhost wwe]# cat -E good $ good[root@localhost wwe]#
出差刚刚回来。。。。 回来后尝试了一下你的方式,简单粗暴,我喜欢。至少是解决了我的问题。 sed命令我不太熟,最后合并文件的操作用你的方法试了下好像有点问题,我是用的cat A B >> A这种更简单粗暴的方式。 不过总算是搞定了,这个问题看似很弱,但是真心很奇葩啊。。先结了吧,如果以后发现有更高级的方法再来分享。
shucheng36 2013-09-02
  • 打赏
  • 举报
回复
grep -v "^$" filename 但是这样删除了所有的空行
shiquxinkong 2013-09-02
  • 打赏
  • 举报
回复
[root@localhost wwe]# cat -n good 1 Line 2 gd 3 [root@localhost wwe]# sed -i '/^$/d' good [root@localhost wwe]# cat -n good 1 Line 2 gd [root@localhost wwe]#
Chris1489 2013-09-02
  • 打赏
  • 举报
回复
引用 4 楼 qq120848369 的回复:
那你直接head -n 行数-1不就可以了吗?
我用
awk 'END{print NR}' a
试了一下,读取出来的我之前的样例文件的行数是2,如果我取head -n 行数-1,那我的第二行数据应该就没有了吧?这个办法好像不行诶。。
shiquxinkong 2013-09-02
  • 打赏
  • 举报
回复
明白你的意思了。一下是我的实现,我也刚接触这东西,有点繁琐。 [root@localhost wwe]# cat -E good $ good$ [root@localhost wwe]# 1.借助tr命令 [root@localhost wwe]# tail -n1 good | tr -d '\n' >> oo [root@localhost wwe]# cat -E oo good[root[/color]@localhost wwe]# 2.将good中的最后一行删除 [root@localhost wwe]# sed -i '$d' good [root@localhost wwe]# cat -E good $ 3.将oo中的处理了换行字符的结果写入good [root@localhost wwe]# sed -i 'r oo' good [root@localhost wwe]# cat -E good $ good[root@localhost wwe]#
Chris1489 2013-09-02
  • 打赏
  • 举报
回复
引用 6 楼 shiquxinkong 的回复:
[root@localhost wwe]# cat -n good 1 Line 2 gd 3 [root@localhost wwe]# sed -i '/^$/d' good [root@localhost wwe]# cat -n good 1 Line 2 gd [root@localhost wwe]#
我测试了一下你的方法,可能是我之前表述的有问题,我自己测试了一下,如果文件最后有一个换行符的话,cat出来结果是这样的: [root@localhost wwe]# cat -n good 1 Line 2 gd [root@localhost wwe]# 我把文件拖到WINDOWS下,使用UltraEdit把换行符删掉,再cat,结果是这样的(注意看命令提示符的位置),而这样就是我要的效果: [root@localhost wwe]# cat -n good 1 Line 2 gd[root@localhost wwe]# 不知道这次我表述清楚没有。。反正我就是想要去掉最后一行的linux换行符。
  • 打赏
  • 举报
回复
试试
sed '/^[[:space:]]*$/d' filename
沭水河畔 2013-08-30
  • 打赏
  • 举报
回复
qq120848369 2013-08-30
  • 打赏
  • 举报
回复
那你直接head -n 行数-1不就可以了吗?
Chris1489 2013-08-30
  • 打赏
  • 举报
回复
google过啊。。尝试过N种办法了,都不行,最后总有个空行 刚刚也尝试了sed -i '${/^$/d}' file和sed '/^[[:space:]]*$/d' filename,都不行啊

19,615

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧