LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 751|回复: 1

怎样获得sed在一个文件中进行文本匹配成功的次数?急,谢谢!

[复制链接]
发表于 2005-11-4 11:39:56 | 显示全部楼层 |阅读模式
要求如下:

编写一个Shell Script完成以下功能:
a)对于某目录及其子目录中的所有文件进行文本替换,替换规则为:如果某行只包括“UPE”三个文本字符,但是“UPE”的前面或后面可以存在多个空格或多个TAB,则将此行替换为“UNIX Programming Environment”。
b)如果命令行没有输入参数,则在当前目录中进行替换;如果命令行提供一个输入参数,则此参数指定目录名。
c)程序结束时打印发生替换的总行数。
d)不能使用find 命令;当程序退出后不能在系统中残留临时文件;
e)必须处理执行过程中用户输入的中断键。


现在就是统计替换行数的功能难以实现,因为用sed s/find/replace/g替换时无法获得替换的行数?请问这个问题怎样解决?


我的脚本如下:

  1. #! /bin/bash

  2. linecount="0"

  3. trap "myexit" 1 2 3 15

  4. function tranverse ()
  5. {
  6.     cd $1
  7.     set `ls`
  8.     for i in $*
  9.     do
  10.         if [ -d $i ]
  11.         then
  12.             tranverse $i
  13.         else
  14.             echo `pwd`"\"$i
  15.             sed -i -e 's/^[ \t]*UPE[ \t]*$/Unix Programming Environment/g' $i
  16.             linecount=$((linecount + 1))
  17.         fi
  18.     done
  19.     cd ..
  20. }

  21. function myexit ()
  22. {
  23.     printf "Total %s lines replaced.\n" $linecount   
  24. }

  25. if [ 0 -eq $# ]
  26. then
  27.     tranverse .
  28. else
  29.     tranverse $1
  30. fi

  31. printf "Total %s lines replaced.\n" $linecount
复制代码
发表于 2005-11-4 18:07:17 | 显示全部楼层
一个笨办法啊,应该有更好的
在sed -i -e 's/^[ \t]*UPE[ \t]*$/Unix Programming Environment/g' $i之前加
sed -e '/^[ \t]*UPE[ \t]*$/p' -n $i | wc -l
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表