|
要求如下:
编写一个Shell Script完成以下功能:
a)对于某目录及其子目录中的所有文件进行文本替换,替换规则为:如果某行只包括“UPE”三个文本字符,但是“UPE”的前面或后面可以存在多个空格或多个TAB,则将此行替换为“UNIX Programming Environment”。
b)如果命令行没有输入参数,则在当前目录中进行替换;如果命令行提供一个输入参数,则此参数指定目录名。
c)程序结束时打印发生替换的总行数。
d)不能使用find 命令;当程序退出后不能在系统中残留临时文件;
e)必须处理执行过程中用户输入的中断键。
现在就是统计替换行数的功能难以实现,因为用sed s/find/replace/g替换时无法获得替换的行数?请问这个问题怎样解决?
我的脚本如下:
- #! /bin/bash
- linecount="0"
- trap "myexit" 1 2 3 15
- function tranverse ()
- {
- cd $1
- set `ls`
- for i in $*
- do
- if [ -d $i ]
- then
- tranverse $i
- else
- echo `pwd`"\"$i
- sed -i -e 's/^[ \t]*UPE[ \t]*$/Unix Programming Environment/g' $i
- linecount=$((linecount + 1))
- fi
- done
- cd ..
- }
- function myexit ()
- {
- printf "Total %s lines replaced.\n" $linecount
- }
- if [ 0 -eq $# ]
- then
- tranverse .
- else
- tranverse $1
- fi
- printf "Total %s lines replaced.\n" $linecount
复制代码 |
|