Ich brauche ein Bash-Skript, das Folgendes tun sollte: - Lesen von einer Eingabedatei Zeile für Zeile, die Format: [Umgebung] = [Dateiname] = [Eigenschaftenschlüssel] = [Eigenschaftswert] - Es wird alle Dateien ändern, indem alle Eigenschaften in einem $ SOURCE-Verzeichnis entsprechend der Eingabedatei ersetzt werden. Jetzt bin ich an dem Punkt "Replace and Count" fest.ersetzen und zählen bash unable durch awk und sed
Der Code, bis die „ersetzen und zählen“ Phase: &, /, ....:
PROPERTIES_LIST=/home/user/test_scripts/envPropList.txt
SOURCE=/home/user/test_scripts/source-directory
PROPERTIES_LOCATION=/WEB-INF/classes/
PROPERTIES_SOURCE=$SOURCE$PROPERTIES_LOCATION
ENV=$1
echo "> Update for ENVIRONMENT: $ENV... Please wait!"
NR=1
while read line; do
IFS== read env prop <<< "$line"
if [[ $env == $ENV]]
then
IFS== read file key value <<< "$prop"
if [[ -z $file ]] || [[ -z $key ]] || [[ -z $value ]]
then
echo "> [ERROR] [LINE $NR] - WRONG/MISSING PROPERTY: $line"
else
//MODIFY $file BY REPLACE AND COUNT
//IF $key IS NOT FOUND AT ALL AN ERROR MESSAGE SHOULD BE DISPLAYED. ITERATION SHOULD CONTINUE
//IF $key IS FOUND MORE THEN ONCE, A WARNING MESSAGE SHOULD BE DISPLAYED. ITERATION SHOULD CONTINUE
echo "done"
fi
fi
NR=$(($NR + 1))
done <$PROPERTIES_LIST
ich folgende ohne Erfolg ohne Erfolg, weil Wert in den Eigenschaften jedes Zeichen (wie sein kann, versucht habe,):
COUNT=$(grep -c "$key" $PROPERTIES_SOURCE$file)
sed -i "s/${OLD}/${NEW}/g" $PROPERTIES_SOURCE$file
auch als awk nicht funktionierte erwartet:
DEST=/home/user/test_scripts/test.txt
OLD='asd.asd'
NEW='test/test?test.test&test=test'
COUNT=$(grep -c "$OLD" $DEST)
#sed -i "s/#${OLD}#/#${NEW}#p/g" $DEST
#echo "$OLD=$NEW"
echo "nr de rezultate: "$COUNT
awk -v OLD=$OLD -v NEW=$NEW '
($0 ~ OLD) {gsub(OLD, NEW); count++}1
END{print count " substitutions occured."}
' "$DEST"
Und für Eingabedatei:
asd.asd
ewrqfg
qweasd.asdqwreqe
asd asd.asd
egd
test
Ich habe die folgende Ausgabe:
test/test?test.testasd.asdtest=test
ewrqfg
qwetest/test?test.testasd.asdtest=testqwreqe
test/test?test.testasd asdtest=test.asd
egd
test
Wenn ich "&" von $ NEW entfernen, alles geht gut.