免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: abigale111
打印 上一主题 下一主题

[文本处理] 请教高手:如何用sed在某个文件夹的所有文件中跨行匹配 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
11 [报告]
发表于 2012-07-25 11:00 |只看该作者
回复 10# abigale111


    $i 是shell来识别的,不是awk。

你再检查检查。

论坛徽章:
0
12 [报告]
发表于 2012-07-25 11:24 |只看该作者
回复 11# blackold

非常感谢

shell脚本如下能正确输出
#!/bin/bash
srcfolder="/home/king/andr_pc/bionic/linux/"
objfile1="/home/king/work/result1"
for i in $(find $srcfolder -type f)
do   
    awk '/Lesser General/,/Version 2/{if(!f)print FILENAME >> "/home/king/work/result1";print >> "/home/king/work/result1";f=1}' /home/king/andr_pc/bionic/linux/mxcfb.h
done

shell脚本如下没有输出
#!/bin/bash
srcfolder="/home/king/andr_pc/bionic/linux/"
objfile1="/home/king/work/result1"
for i in $(find $srcfolder -type f)
do   
    awk '/Lesser General/,/Version 2/{if(!f)print FILENAME >> "/home/king/work/result1";print >> "/home/king/work/result1";f=1}' $i
done

另外  awk '/Lesser General/,/Version 2/{if(!f)print FILENAME >> "$objfile1";print >> "$objfile1";f=1}' /home/king/andr_pc/bionic/linux/mxcfb.h 输出的文件名为$objfile1,和预想的不一样是什么原因呢

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
13 [报告]
发表于 2012-07-25 11:36 |只看该作者
回复 12# abigale111

这样,你执行这个脚本看看。
  1. #!/bin/bash
  2. srcfolder="/home/king/andr_pc/bionic/linux/"
  3. objfile1="/home/king/work/result1"
  4. for i in $(find $srcfolder -type f)
  5. do   
  6.     echo  awk -v objfile1=$objfile1 '/Lesser General/,/Version 2/{if(!f)print FILENAME >> objfile1;print >> objfile1;f=1}' $i
  7. done
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-07-25 13:07 |只看该作者
回复 13# blackold


屏幕上显示如下

awk -v objfile1=/home/king/work/result1 /Lesser General/,/Version 2/{if(!f)print FILENAME >> objfile1;print >> objfile1;f=1} /home/king/andr_pc/bionic/linux/ner_ipv6/ip6t_L.h
awk -v objfile1=/home/king/work/result1 /Lesser General/,/Version 2/{if(!f)print FILENAME >> objfile1;print >> objfile1;f=1} /home/king/andr_pc/bionic/linux/ner_ipv6/ip6t_m.h
awk -v objfile1=/home/king/work/result1 /Lesser General/,/Version 2/{if(!f)print FILENAME >> objfile1;print >> objfile1;f=1} /home/king/andr_pc/bionic/linux/ner_ipv6/ip6t_RT.h

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
15 [报告]
发表于 2012-07-25 13:28 |只看该作者
回复 14# abigale111


    正常。

   脚本执行也应该正常才对。

论坛徽章:
0
16 [报告]
发表于 2012-07-25 15:18 |只看该作者
回复 15# blackold


    还是不行啊,是不是因为find到的文件名后面有换行符号呢

论坛徽章:
0
17 [报告]
发表于 2012-07-25 15:47 |只看该作者
回复 10# abigale111


for i in $(find $srcfolder -type f)
do  
      echo ${i}     awk '/Lesser General/,/Version 2/{if(!f)print FILENAME >> "result";print >> "result";f=1}' ./linux/if_dr.h

done
你的$srcfolder  路径对吗,建议你echo 看看,如果路径对的话,awk应该是没问题的

论坛徽章:
0
18 [报告]
发表于 2012-07-25 16:05 |只看该作者
回复 17# dwj19830118


    路径是对的,对某个特定的文件能过正确输出,但是对变量$i就不行了

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
19 [报告]
发表于 2012-07-25 16:34 |只看该作者
回复 18# abigale111


    set -vx
    之后执行脚本,查看。

论坛徽章:
0
20 [报告]
发表于 2012-07-25 16:50 |只看该作者
回复 19# blackold


    还是那样,不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP