geez,我尝试了MAN页面,并在这里发布了几个帖子。我想我只是愚蠢的,因为我',没有得到它。如何使用sed替换文件中的字符串与shell变量
我有一个JavaScript文件{VERSION}和{DISTRO},其中变量字符串值应该像这样替换。
var MyObject = {
/**
* @property {string} VERSION Holds the current version of the framework
*/
VERSION: '{VERSION}',
/**
* @property {string} DISTRO Holds the distrobution tag of the framework
*/
DISTRO: '{DISTRO}'
};
而这个命令为我的shell运行。无论我这样做,它不起作用,或者我得到错误。
VERSION="0.9.0"
DISTRO="Developer"
OUT_CAT=$OUT_CAT_DEBUG
${OUT_CAT} | sed -i "s/{VERSION}/\$VERSION/" -e "s/{DISTRO}/\$DISTRO/" ${OUT_CAT}
#sed -i "s/{VERSION}/$VERSION/" -e "s/{DISTRO}/$DISTRO/" ${OUT_CAT}
那么,我是一个什么样的方式?看起来应该非常简单直接。
[编辑] 这里是脚本的脱机版本,所以你可以告诉我在做什么以及变量来自哪里。
#!/bin/bash
VERSION="0.9.0"
DEV_DIR=../lib
DIST_DIR=../dist
WEB_DIR=/d/Android_Dev/GitHUB/WEB/h5c3/dist
OUT_CAT_DEBUG=h5c3.debug.cat
OUT_MIN_DEBUG=h5c3.debug.min
OUT_ZIP_DEBUG=$DIST_DIR/h5c3.debug.gz
OUT_CAT_RELEASE=$DIST_DIR/h5c3.release.cat
OUT_MIN_RELEASE=h5c3.release.min
OUT_ZIP_RELEASE=$DIST_DIR/h5c3.release.gz
echo Building Version "$1"...
if [ "$1" == debug ]; then
DISTRO="Developer"
OUT_CAT=$OUT_CAT_DEBUG
OUT_MIN=$OUT_MIN_DEBUG
OUT_ZIP=$OUT_ZIP_DEBUG
# empty it out
> ${OUT_CAT}
cat $DEV_DIR/packed.js >> ${OUT_CAT}
#Development support
cat $DEV_DIR/h5c3_debug.js >> ${OUT_CAT}
elif [ "$1" == release ]; then
DISTRO="Production"
OUT_CAT=$OUT_CAT_RELEASE
OUT_MIN=$OUT_MIN_RELEASE
OUT_ZIP=$OUT_ZIP_RELEASE
# empty it out
> ${OUT_CAT}
cat $DEV_DIR/packed.js >> ${OUT_CAT}
cat $DEV_DIR/h5c3_release.js >> ${OUT_CAT}
else
#publish.sh debug
#publish.sh release
exit 2
fi
#Build Game Core
cat $DEV_DIR/core/stacktrace.js >> ${OUT_CAT}
#Build Externals
cat $DEV_DIR/ext/base64.js >> ${OUT_CAT}
#Build Engine
cat $DEV_DIR/engine/boot.js >> ${OUT_CAT}
#Build Internal Components
cat $DEV_DIR/components/component.js >> ${OUT_CAT}
#Build Systems
cat $DEV_DIR/systems/system.js >> ${OUT_CAT}
#Build Framework
cat $DEV_DIR/framework/page.js >> ${OUT_CAT}
#Build Web App
cat $DEV_DIR/webapp/game.js >> ${OUT_CAT}
if [ "$1" == debug ]; then
#Development support
cat $DEV_DIR/debugger/profiler.js >> ${OUT_CAT}
cat $DEV_DIR/debugger/console.js >> ${OUT_CAT}
cat $DEV_DIR/debugger/debug.js >> ${OUT_CAT}
cat $DEV_DIR/debugger/developer.js >> ${OUT_CAT}
fi
if [ "$1" == release ]; then
echo Removing any debug calls from ${OUT_CAT}
sed -i '/this.debug/d' ${OUT_CAT}
fi
echo "Inserting distribution & version in ${OUT_CAT}"
${OUT_CAT} | sed -i "s/{VERSION}/\$VERSION/" -e "s/{DISTRO}/\$DISTRO/" ${OUT_CAT}
echo Minimizing...[${OUT_CAT} to ${OUT_MIN}]
> ${OUT_MIN}
java -jar yuicompressor-2.4.7.jar ${OUT_CAT} -o ${OUT_MIN}
#echo Compressing...[${OUT_MIN} to ${OUT_ZIP}]
#gzip --best --force ${OUT_MIN}
echo Copying to WEB Folder...
cp --update ${OUT_MIN} ${WEB_DIR}
echo Complete.
exit
完美的工作。我没有使用逃生,但从另一个帖子尝试。似乎我需要第一个-e。谢谢你nlucaroni – NlaakALD 2013-03-05 19:36:33
啊好吧,我想你可能已经意外地离开了那个。在执行多个表达式时,每个表达式都需要“-e”。干杯。 – nlucaroni 2013-03-05 19:40:54
我会记住的。再次感谢。 – NlaakALD 2013-03-05 19:45:41