【发布时间】:2015-01-07 01:41:15
【问题描述】:
我正在尝试用 sed -e command 替换 shell 脚本中的单词,但它没有替换,请帮忙,我已经尝试了以下
我们在/data/docs/config.log 中有一个单独的文件,在那个文件中有一个单词 ?account 例如,
用户名 acc,密码 acc,?account.name
需要使用 sed -e 命令将这个 ?account 单词替换为单词 '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
【问题讨论】:
-
reacc = GLOBAL不是有效的 shell 变量赋值,您需要删除空格。?是一个正则表达式特殊字符,可能需要转义(但在模式开始时可能不需要)。你确定config.log有内容吗?您是否不小心运行了sed -e .... /data/docs/config.log > /data/docs/config.log并将config.log 文件归零? -
无法在 Bash 上重现。你用的是什么外壳?
-
脚本是 , #! /bin/sh
-
感谢 Etan,我删除了空间,但只生成了空文件,是的 config.log 有以下内容用户名 acc,密码 acc,?account.name,如果我用 echo $reacc 检查它的给正确的输出为 GLOBALS ,我也尝试使用静态输出,如 sed -e "s/?account/$reacc/g" /data/docs/config.log >$1 但没有结果
标签: sed