如何使用两个OS环境变量进行字符串替换

时间:2020-02-21 19:58:09

标签: string bash awk sed

以下约束适用...

  1. 可用的 sed 版本没有–i(就地替换)选项。
  2. 在重命名文件时,首选字符串的就地替换。
  3. 首选单个命令。
  4. 不仅可以通过交互式命令在BASH 5.0.0(2)脚本中使用。

以下内容已经过尝试,但由于 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
.
.
.

1 个答案:

答案 0 :(得分:0)

如果要编辑文件,请使用文件编辑器:) sed用于编辑

ed tmp.txt <<EOF
/^attachmentFilesWhiteList/s/= .*/= $PROP_FILE_PROP_NEW_VALUE
wq
EOF

请注意,PROP_FILE_PROP_NEW_VALUE不需要导出;在ed运行之前,shell会扩展here文档中的值。

相关问题