Siduction Forum
Siduction Forum => Scripting & Kernelhacking => Topic started by: bluelupo on 2010/12/17, 20:19:26
-
Hallo zusammen,
ich sitze hier gerade vor einen kniffligen Scriptproblem.Wie kann ich aus der Crontab bei allen Zeilen die ersten fünf Leerzeichen (also die ersten 5 Felder) durch ein anderes Zeichen ersetzen, zB. den '#'.
09 20 * * * /usr/local/scripts/testscript.sh -a -x
Das Ergebnis sollte dann so ausschauen:
09#20#*#*#*#/usr/local/scripts/testscript.sh -a -x
Ein erster Ansatz war den awk zu nutzen der kennt aber nur feste Anzahl von Spalten (Feldern) und ist daher ungeeignet, da diese Variabel sein kann. Die Leeräume im sechsten Crontab-Feld (Kommando) sind variabel.
Was gäbe es für Lösungsmöglichkeiten?
-
cat datei | sed -e's/ /#/' -e's/ /#/' -e's/ /#/' -e's/ /#/' -e's/ /#/' >neuDatei
-
sed würde ich auch nehmen, hier sind noch nen paar vorschläge
http://sed.sourceforge.net/sed1line_de.html
-
@ralul: Danke, das habe ich gesucht. Manchmal sieht man den Wald vor lauter Bäumen nicht ;-)
@brummer: Danke, für den Link
-
Ich hab' auch noch eine Lösung gefunden.
STRING="09 20 * * * /usr/local/scripts/testscript.sh -a -x"
for TMP in 1 2 3 4 5
do
VERARBEITET=$(echo "${STRING/ /#}")
STRING=$VERARBEITET
done
echo "$STRING"
09#20#*#*#*#/usr/local/scripts/testscript.sh -a -x
Gute Beispiele zur Stringverarbeitung gibt's im Advanced Bash-Scripting Guide: Chapter 10. Manipulating Variables (http://tldp.org/LDP/abs/html/string-manipulation.html)