在SO的帮助下,我已经能够纠正我的sed命令,所以我可以使用变量(使用'而不是'并且不使用g作为全局变量)。使用sed替换文本的shell bash,cat文件
不过,我挣扎着爬命令才能正常工作。
给你一些情况下,我有一个包含文本和一些行包含一个或多个标签的众多行的文件。这些标签在以下格式:
[#$key#] - i.e #[#] is used to indicate the presence of a key
然后我有一个内部数组对象t内存储包含每个键,按以下格式的相应值的字符串值:
$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,但我的版本似乎不支持,我
不需要'cat file | sed> new_file'。相反,请执行'sed ... file> new_file'。 – fedorqui
您似乎对设置'key'和'value'的行有问题,我认为这会导致一些错误。 – chepner
键和值变量是预期的 - 已经echo'd他们来仔细检查 –