sed命令无法正常工作

时间:2015-01-06 16:42:16

标签: sed

我正在尝试用sed -e command替换shell脚本中的单词,但它没有替换,请帮忙,我已经尝试过以下

我们在/data/docs/config.log中有单独的文件,在该文件中有一个单词?帐户,例如,

用户名acc,密码acc,?account.name

这个帐户词需要使用sed -e命令替换为'GLOBAL',

reacc = GLOBAL

sed -e "s/?account/$reacc/g" /data/docs/config.log > /data/docs/newconfig.log 

但是这里的文件newconfig.log创建了0大小,没有输出写入文件,它没有替换它的空文件,

输出应为username acc, passsword acc, GLOBAL.name in newconfig.log

2 个答案:

答案 0 :(得分:1)

作为唯一能够重现问题的人,你几乎可以独立完成。但是,你可以做很多事情来分析问题。

  • 仔细检查外壳。不要盲目相信#!/bin/sh。例如,在cygwin中,/bin/sh是bash的别名。验证:echo $SHELL
  • 检查权限和文件系统。你有权写入输出文件吗?磁盘已满吗? cat /data/docs/config.log > /data/docs/newconfig.log有用吗?再次在另一个文件夹中测试。
  • 仔细检查输出文件。它真的是空的,还是文件系统只是因为更新文件大小而变慢? sed真的完蛋了吗?测试没有输出重定向;查看输出是否转储到stdout。
  • 用小文件测试;一两行足够了。
  • 如果即使这样也行不通,那么请测试sed本身。谁知道,也许你有一个隐藏真实sed的怪异别名。最简单的过滤器是sed -e '',它应该简单地回显您键入的每一行(就像没有参数的cat一样)。那样有用吗?然后尝试一些简单的模式。

在成功的测试用例和失败的测试用例之间进行系统迭代,直到找到断点。这样做,你应该能够找到原因。对不起,这就是我现在可以为你做的一切。

答案 1 :(得分:0)

删除=周围的空格。制作后尝试

reacc=GLOBAL