免费注册 查看新帖 |

Chinaunix

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

请教: "perl -pi -e"在sh, csh中的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-05 23:25 |只看该作者 |倒序浏览
本帖最后由 thyswallow 于 2011-01-05 23:26 编辑

想用"perl -pi -e"使用正则表达式匹配并替换文件中的特殊字符,在 sh中工作正常,但是在 csh中,虽然替换成功,但是总是出现一些额外的信息。


Eg, 替换临时文件中的password, 将12345 替换成 xxxx.

1.tmpfile
============================================
isql -Upxedbo -P12345 -SLON_PXE_UAT -DPXE -iCMG22546.sql
============================================

替换后的文件应为:isql -Upxedbo -Pxxxx -SLON_PXE_UAT -DPXE -iCMG22546.sql


2. Script
============================================
#!/bin/csh

grep -i "isql" tmpfile > /dev/null
if ( $status == 0 ) then
        echo "matched"
        `perl -pi -e "s/(.*) -P(.*) (.*)/\1 -Pxxxx \3/" tmpfile`
else
        echo "don't match"
endif
============================================

3. Run
>./testfile2
matched
/usr/openwin/bin/: Permission denied
>


4. Problem
运行后, tmpfile文件中的12345被正确替换成了xxxx, 但是出现
/usr/openwin/bin/: Permission denied。

如果使用#!/bin/sh,就不会出现这样的信息。
而且在不同的机器上运行,有时会出现不同的信息。
/usr/local/bin/: Permission denied

觉得很蹊跷,请指点。

论坛徽章:
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
2 [报告]
发表于 2011-01-05 23:58 |只看该作者
想用"perl -pi -e"使用正则表达式匹配并替换文件中的特殊字符,在 sh中工作正常,但是在 csh中,虽然替换成 ...
thyswallow 发表于 2011-01-05 23:25



`perl -pi -e "s/(.*) -P(.*) (.*)/\1 -Pxxxx \3/" tmpfile`

改成
`perl -pi -e 's/\-P(\S+)/-Pxxxx/' tmpfile`

论坛徽章:
0
3 [报告]
发表于 2011-01-06 04:45 |只看该作者
回复 2# jason680


    谢谢jason680。
   还是有同样的信息。

   >./testfile2
       matched
      /usr/openwin/bin/: Permission denied

求职 : 技术支持/维
论坛徽章:
0
4 [报告]
发表于 2011-01-06 08:05 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [报告]
发表于 2011-01-06 08:36 |只看该作者
echo $PATH
看看,是不是里面有 /usr/openwin/bin/ 这个路径,有的话去掉应该就可以了。

论坛徽章:
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 [报告]
发表于 2011-01-06 11:30 |只看该作者
回复  jason680


    谢谢jason680。
   还是有同样的信息。

   >./testfile2
       matched
  ...
thyswallow 发表于 2011-01-06 04:45



isql 最好加绝对路径
ex: /usr/bin/isql
用which isql就知道在那....

论坛徽章:
0
7 [报告]
发表于 2011-01-06 22:39 |只看该作者
回复 5# ly5066113


   请问为什么要去掉呢?
   我在另外一台机器上运行时: 出现信息
  
  /usr/local/bin/: Permission denied

   不能把所有出现信息的PATH都去掉吧?
  
  而且,#!/bin/sh就没有任何问题。

论坛徽章:
0
8 [报告]
发表于 2011-01-06 22:47 |只看该作者
回复 6# jason680


    如果isql是放在tmpfile中需要的执行的话,是需要绝对路径的。
   但是,我只是将tmpfile文件当作文本文件将password进行替换,绝对路径是没有必要的吧?
   
   即便试了在tmpfile文件中删除isql,不做 “grep”判断就对password进行替换,还是会出现
   /usr/local/bin/: Permission denied

论坛徽章:
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
9 [报告]
发表于 2011-01-06 22:51 |只看该作者
本帖最后由 jason680 于 2011-01-06 22:53 编辑
回复  jason680


    如果isql是放在tmpfile中需要的执行的话,是需要绝对路径的。
   但是,我只是将 ...
thyswallow 发表于 2011-01-06 22:47



沒有人說是perl的問題....

為什麼不用set -x看一下,就知道問題在那!!??....

论坛徽章:
0
10 [报告]
发表于 2011-01-06 23:54 |只看该作者
回复 9# jason680


    谢谢你的回复!

   我已经将script改为两行。如果#!/bin/csh就会出现多余的信息,如果#!/bin/sh 或者 #!/bin/bash就没有问题。

    请问我如何用set -x进行调试?还请详示,不吝指教。 多谢!

   
    #!/bin/csh
     `perl -pi -e "s/(.*) -P(.*) (.*)/\1 -Pxxxx \3/" tmpfile`
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP