免费注册 查看新帖 |

Chinaunix

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

替换本目录下所有文件中某字符串,请优化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 10:12 |只看该作者 |倒序浏览
for i in ./* ; do
   echo "Testing" grep "abc" $i
   if [ "$i" != "./replace" ] and [ $? != 1 ]
   then
      echo "Replacing" $i
      sed "s/abc/xyz/g" $i > $i.new
   fi
done

论坛徽章:
0
2 [报告]
发表于 2003-02-27 10:33 |只看该作者

替换本目录下所有文件中某字符串,请优化

for 循环中加一个sed 's/abc/xyz/g' $i >$i.new 就可以了吧。不用if判断。

论坛徽章:
0
3 [报告]
发表于 2003-02-27 10:45 |只看该作者

替换本目录下所有文件中某字符串,请优化

[quote]原帖由 "microroad"]for 循环中加一个sed 's/abc/xyz/g' $i >$i.new 就可以了吧。不用if判断。[/quote 发表:


如果是这样的话,就会连一些不包含“abc”的文件也会生成相应的new文件了。不过我的判断好像起不了作用,测试失败了。

本来man grep里面说:
This command returns the following exit values:

0 A match was found.

1 No match was found.

>1 A syntax error was found or a file was inaccessible (even if matches were
found).

但是我在then之后用echo $?居然可以出现0。百思不得其解。

论坛徽章:
0
4 [报告]
发表于 2003-02-27 11:54 |只看该作者

替换本目录下所有文件中某字符串,请优化

for i in ./* ; do
echo "Testing" grep "abc" $i
grep "abc" $i
if [ $? -eq 0 ];then
         if [ "$i" != "./replace" ] ;then
                echo "Replacing" $i
                sed "s/abc/xyz/g" $i > $i.new
        fi
fi
done

论坛徽章:
0
5 [报告]
发表于 2003-02-27 12:04 |只看该作者

替换本目录下所有文件中某字符串,请优化

谢谢,原来shell的if是不可以同时判断两个逻辑的。ft

原帖由 "hwhcom"] "./replace"  发表:
;then
                echo "Replacing" $i
                sed "s/abc/xyz/g" $i > $i.new
        fi
fi
done

论坛徽章:
0
6 [报告]
发表于 2003-02-27 13:06 |只看该作者

替换本目录下所有文件中某字符串,请优化

原帖由 "imu" 发表:
谢谢,原来shell的if是不可以同时判断两个逻辑的。ft

[quote]原帖由 "hwhcom"] "./replace"  发表:
;then
                echo "Replacing" $i
                sed "s/abc/xyz/g" $i > $i.new
        fi
fi
done
[/quote]逻辑判断
1.字串用:= !=
2.数值用:-eq -ne -lt -le -gt -ge
3.同时判断两个逻辑: -o(或者) -a(并且)

if [ "$i" != "./replace" ] and [ $? != 1 ] 可以改成:
if [ "$i" != "./replace"  -a  $? -ne 1 ]

论坛徽章:
0
7 [报告]
发表于 2003-02-27 15:55 |只看该作者

替换本目录下所有文件中某字符串,请优化

受教!Thx didikei.

论坛徽章:
0
8 [报告]
发表于 2003-06-16 15:19 |只看该作者

替换本目录下所有文件中某字符串,请优化

我依照上面的内容,编辑了下面的纯文本文件:

for i in ./* ; do
echo "Testing" grep "abc" $i
if [ "$i" != "./replace" -a $? -ne 1 ]
then
echo "Replacing" $i
sed "s/abc/xyz/g" $i > $i.new
fi
done

保存为replae,然后
#sh replace

屏幕显示:

Testing grep abc ./admin.php
./replace: lines: [./admin.php: No such file or directory
.......
.......
.......

这怎么解决?

我第一次用Shell 脚本。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP