comment utiliser sed pour remplacer une chaîne de caractères dans un fichier avec une variable du shell
Eh ben, j'ai essayé les pages de manuel, et de plusieurs postes ici. Je suppose que je suis stupide parce que j', ne pas l'obtenir.
J'ai un fichier javascript qui a {VERSION} et {DISTRIBUTION}, la variable de chaîne de valeurs doivent être remplacés comme cela.
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}'
};
Et ce de course de commande de ma coquille. n'importe qui pourquoi je fais cela, il ne fonctionne pas ou j'ai des erreurs.
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}
Oui de quelle manière suis-je un tard? Semble comme il devrait être très simple et direct.
[MODIFIER]
Ici s est déclenché version du script de sorte que vous pouvez raconter ce que je fais et où les variables sont venant de.
#!/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
OriginalL'auteur NlaakALD | 2013-03-05
Vous devez vous connecter pour publier un commentaire.
Il semble que vous essayez une combinaison de la tuyauterie de sed et à l'aide d'un fichier. Ce qui suit fonctionnera parfaitement bien,
Vous n'avez pas besoin d'échapper à la
$
, et vous n'avez pas de tuyau ensed
depuis que vous utilisez-i
de modifier le fichier en place. Vous devez également utiliser-e
pour chaque expression leur est plus un.EDIT: Ici est le bit dans le sed pages de manuel qui donne l'indication de la question avec
-e
option (l'emphase est mienne),Ah ok, je pensais que vous venez peut-être de gauche que de sortir accidentellement. Vous aurez besoin
-e
sur chaque expression lorsque plusieurs sont en cours d'exécution. Des acclamations.Je vais le rappeler. Merci encore.
OriginalL'auteur nlucaroni
Vous n'avez pas besoin d'échapper à la
$
:Et qu'est-ce que
$OUT_CAT_DEBUG
que vous êtes tuyauterie?OriginalL'auteur Chris Seymour