【发布时间】:2014-02-09 19:30:09
【问题描述】:
在 SO 的帮助下,我能够更正我的 sed 命令,以便我可以使用变量(使用 ' 而不是 " 并且没有使用 g 表示全局)。
但是,我正在努力让命令正常工作。
为了给你一些背景信息,我有一个包含多行文本的文件,有些行包含一个或多个标签。这些标签的格式如下:
[#$key#] - i.e #[#] is used to indicate the presence of a key
然后我有一个内部数组对象,它存储一个字符串值,其中包含以下格式的每个键和一个对应的值:
$key=$value
我要做的是在使用全局 sed 替换将 $key 交换为数组对象中的相应值的同时对包含标签的文件进行分类。
我遇到的问题是我的 grep/sed 命令没有替换任何文本,我不知道为什么。
这是我的代码:
for x in "${prop[@]}"
do
key=`echo "${x}" | cut -d '=' -f 1`
value=`echo "${x}" | cut -d '=' -f 2`
# global replace on the $MY_FILE
cat $MY_FILE | sed "s|\[#${key}#\]|${value}|g" > ${TEMP_MY_FILE}
cat $TEMP_MY_FILE > $MY_FILE
done
我想过用sed -i,但是我的版本好像不支持-i
【问题讨论】:
-
不需要
cat file | sed > new_file。相反,请执行sed ... file > new_file。 -
您似乎对设置
key和value的行也有问题,我认为这会导致一些错误。 -
键和值变量与预期一致 - 已回显它们以进行仔细检查
-
在脚本开头使用
set -x并以这种方式进行调试 -
为了将来参考,
sed -i ... inputfile只是sed ... inputfile > tmpfile; mv tmpfile inputfile的快捷方式。它只是让你不必明确地声明它......