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

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

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


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

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

只好请教各位高手了,希望能够解决我的问题,先谢了!
...全文
9164 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,都不行啊
linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合

19,620

社区成员

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

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