免费注册 查看新帖 |

Chinaunix

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

perl 插入行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-07 15:22 |只看该作者 |倒序浏览
请用perl实现,关键字是diskinfo,在diskinfo的前一行加#add by abc,后一行加print (stderr,"abc line111 \n")
cat 1.txt
fdfa
sort_diskinfo()
print1
输出:
fdfa
#add by abc
sort_diskinfo()
print (stderr,"abc line111 \n")
print1
--
另外
perl -pe 'print  "\n" if /diskinfo/' 2.txt
我理解这句是在diskinfo行的下面print "\n";结果却是在其上面打印print "\n"
why呢

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2014-03-07 16:01 |只看该作者
{:2_172:}
  1. #!/usr/bin/perl

  2. my $dist = 'diskinfo';
  3. while (<DATA>) {
  4.     print /$dist/
  5.       ? ( "#add by abc\n", $_, 'print (stderr,"abc line111 \n")', "\n" )
  6.       : $_;
  7. }

  8. __DATA__
  9. fdfa
  10. sort_diskinfo()
  11. print1
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-03-07 16:28 |只看该作者
回复 2# pitonas

感谢回帖
追问一下
    我理解这句是在diskinfo行的下面print "\n";结果却是在其上面打印print "\n"
perl -pe 'print  "\n" if /diskinfo/' 2.txt

如果用命令行的方式,正diskinfo行的下面print "\n";应该如何做呢

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-03-07 16:29 |只看该作者
回复 1# fufelixzh

How about this

# perl -lape '$_="#add by abc\n$_\nprint (stderr,\"abc line111 \\n\")" if /diskinfo/' 1.txt
fdfa
#add by abc
sort_diskinfo()
print (stderr,"abc line111 \n")
print1

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
5 [报告]
发表于 2014-03-07 16:36 |只看该作者
本帖最后由 pitonas 于 2014-03-07 09:46 编辑

{:2_172:} 师傅, this is very good
but -lape: # How about this  -lpe

回复 4# jason680


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2014-03-07 16:57 |只看该作者
回复 5# pitonas


usually, I use "lane" to remember the arguement ...

论坛徽章:
0
7 [报告]
发表于 2014-03-07 17:09 |只看该作者
回复 6# jason680


    感谢回帖

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
8 [报告]
发表于 2014-03-07 17:12 |只看该作者

师傅, thanks! That's smart.
回复 6# jason680


   

论坛徽章:
0
9 [报告]
发表于 2014-03-07 17:13 |只看该作者
  1. perl -h

  2.   -n                assume "while (<>) { ... }" loop around program
  3.   -p                assume loop like -n but print line also, like sed
复制代码

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
10 [报告]
发表于 2014-03-07 20:58 |只看该作者
  1. perl -lpe '/diskinfo/ and $_="#add by abc\n$_\nprint (stderr,\042abc line111 \\n\042)"' ff
  2. dfa
  3. #add by abc
  4. sort_diskinfo()
  5. print (stderr,"abc line111 \n")
  6. print1
复制代码
回复 1# fufelixzh


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP