–i
(就地替换)选项。 以下内容已经过尝试,但由于 sed 是“一次性”工具,因此似乎不起作用。我假设“单次通过”设计是 sed 无法正常工作的原因。当我阅读手册页以使用 awk 中的 sub()函数时,似乎没有使用OS环境变量来替换字符串。
PROP_FILE_PROP="Gleep00"
export PROP_FILE_PROP
echo "${PROP_FILE_PROP}"
PROP_FILE_PROP_NEW_VALUE="Gleep_Value_00 Gleep_Value_01 Gleep_Value_02"
export PROP_FILE_PROP_NEW_VALUE
echo "${PROP_FILE_PROP_NEW_VALUE}"
.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = css js html exe application/pdf text/calendar text/plain application/vnd.xfdl mov avi mp4 webm ogg image/png doc docx xls xlsx ppt pptx jpg jpeg application/octet-stream
.
.
.
sed "s/^attachmentFilesWhiteList =\ .*/attachmentFilesWhiteList =\ ${PROP_FILE_PROP_NEW_VALUE}/"
成功的结果
.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = Gleep_Value_00 Gleep_Value_01 Gleep_Value_02
.
.
.
sed "s/^${PROP_FILE_PROP} = .*/ ${PROP_FILE_PROP} = ${PROP_FILE_PROP_NEW_VALUE}/"
sed "s/^${PROP_FILE_PROP} = / ${PROP_FILE_PROP} = ${PROP_FILE_PROP_NEW_VALUE}/"
sed "s/^\"${PROP_FILE_PROP}\" = / \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"
sed "s/^\"${PROP_FILE_PROP}\" = .*/ \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"
sed "s/^\"${PROP_FILE_PROP}\" = .*/\n \"${PROP_FILE_PROP}\" = \"${PROP_FILE_PROP_NEW_VALUE}\"/"
sed "s/^\"${PROP_FILE_PROP}\" \= .*/\n \"${PROP_FILE_PROP}\" \= \"${PROP_FILE_PROP_NEW_VALUE}\"/"
失败结果
.
.
.
# attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
attachmentFilesWhiteList = css js html exe text/plain application/vnd.xfdl
.
.
.
答案 0 :(得分:0)
如果要编辑文件,请使用文件编辑器:) sed
用于编辑流。
ed tmp.txt <<EOF
/^attachmentFilesWhiteList/s/= .*/= $PROP_FILE_PROP_NEW_VALUE
wq
EOF
请注意,PROP_FILE_PROP_NEW_VALUE
不需要导出;在ed
运行之前,shell会扩展here文档中的值。