免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10122 | 回复: 10
打印 上一主题 下一主题

请教在行尾添加字符串的问题(如何正确处理空行)? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-02 20:31 |只看该作者 |倒序浏览
7可用积分
有一文本文件,比如tmpfile,其中含一些空行(可能是空,也可能是由空白字符如blank,tab等组成),内容类似:

$cat tmpfile
d----         7/20/2007  11:28 AM            publish_html
d----        10/24/2007   6:59 PM            practicalcommonlisp


-a---        12/25/2007  10:51 AM      73603 fs-kit-0.4.tar.gz
-a---        12/25/2007   1:44 PM    1457360 autoconf.pdf
-a---        12/27/2007   8:56 AM     894826 autoconf-archive-2007-12-18.tar.bz2
-a---        12/27/2007   9:14 AM     786188 bashref.pdf
-a---        10/18/2007   7:12 PM    1030575 onlisp.pdf
-a---        10/18/2007   7:14 PM     450125 practicalcommonlisp.zip

在每行的结尾添加一个特定格式的字符串,比如添加一个" <<<append",最后格式如下:
$cat tmpfile
d----         7/20/2007  11:28 AM            publish_html <<<append
d----        10/24/2007   6:59 PM            practicalcommonlisp <<<append


-a---        12/25/2007  10:51 AM      73603 fs-kit-0.4.tar.gz <<<append
-a---        12/25/2007   1:44 PM    1457360 autoconf.pdf <<<append
-a---        12/27/2007   8:56 AM     894826 autoconf-archive-2007-12-18.tar.bz2 <<<append
-a---        12/27/2007   9:14 AM     786188 bashref.pdf <<<append
-a---        10/18/2007   7:12 PM    1030575 onlisp.pdf <<<append
-a---        10/18/2007   7:14 PM     450125 practicalcommonlisp.zip <<<append

虽然
$sed 's/$/ <<<append/g tmpfile

或者
$awk '{ print $0 " <<<append" }' tmpfile

都可以在行尾添加字符串,但是不能正确处理空行,会把每个空行的结尾也添加 <<<append怎样才能正确处理这些空行?


谢谢!

[ 本帖最后由 micra 于 2008-1-2 20:33 编辑 ]

最佳答案

查看完整内容

sed '/^[[:blank:]]*$/!s/$/

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2008-01-02 20:31 |只看该作者
sed '/^[[:blank:]]*$/!s/$/ <<<append/g tmpfile

awk '!/^[[:blank:]]*$/{ print $0 " <<<append" }' tmpfile

论坛徽章:
0
3 [报告]
发表于 2008-01-02 20:45 |只看该作者
再多写一条^ <<<append  over

论坛徽章:
0
4 [报告]
发表于 2008-01-02 20:53 |只看该作者

回复 #3 ly5066113 的帖子

learn

论坛徽章:
0
5 [报告]
发表于 2008-01-02 21:09 |只看该作者

回复 #2 ly5066113 的帖子



sed '/^[[:blank:]]*$/!s/$/ <<<append/g' tmpfile

awk '!/^[[:blank:]]*$/{ print $0 " <<<append" }' tmpfile



还是第一条稍好一点,awk处理后再重定向,空行都没了

论坛徽章:
0
6 [报告]
发表于 2008-01-02 21:13 |只看该作者

回复 #1 micra 的帖子

刚刚查到这贴:http://bbs.chinaunix.net/thread-1034996-1-2.html

其中 cjaizss  的解法:
sed -nr 's/(\w)[ \t]*$/\120071226/p'


类似的,使用

$sed -nr 's/(\w)[ \t]*$/ <<<append/p'

发现文本每行结尾原来的最后一个字符没了(文件是unix格式),变成:

$cat tmpfile
d----         7/20/2007  11:28 AM            publish_htm <<<append
d----        10/24/2007   6:59 PM            practicalcommonlis <<<append
-a---        12/25/2007  10:51 AM      73603 fs-kit-0.4.tar.g <<<append
-a---        12/25/2007   1:44 PM    1457360 autoconf.pd <<<append
-a---        12/27/2007   8:56 AM     894826 autoconf-archive-2007-12-18.tar.bz <<<append
-a---        12/27/2007   9:14 AM     786188 bashref.pd <<<append
-a---        10/18/2007   7:12 PM    1030575 onlisp.pd <<<append
-a---        10/18/2007   7:14 PM     450125 practicalcommonlisp.zi <<<append

是哪里出了问题?

论坛徽章:
0
7 [报告]
发表于 2008-01-02 21:19 |只看该作者
  1. sed -nr 's/(\w)[ \t]*$/\1 <<<append/p'
复制代码

论坛徽章:
0
8 [报告]
发表于 2008-01-02 21:19 |只看该作者

回复 #6 micra 的帖子

明白了,是我的问题,应该是:
$sed -nr 's/(\w)[ \t]*$/\1 <<<append/p'

论坛徽章:
0
9 [报告]
发表于 2008-01-02 21:22 |只看该作者
  1. awk '{if(!/^[[:blank:]]*$/){print $0 "  <<<append"}else print}' Urfile.ext
复制代码

论坛徽章:
0
10 [报告]
发表于 2008-01-02 21:23 |只看该作者

回复 #7 __lxmxn__ 的帖子

haha
Thank you all the same!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP