Frage zu eigenem Shell-Skript

NaRc0tIc

Cadet 4th Year
Registriert
Okt. 2006
Beiträge
80
Hallo Base'ler,

ich hab da mal eine Frage zu einem Script das ich schreiben will.

Habe eine Ausgangsdatei mit folgendem Inhalt:

/Test1 blabla blabla
/Test2 blabla blabla
/Test3 blabla blabla
/Test4 blabla blabla
/Test5 blabla blabla
/Test6 blabla blabla
/Test11 blabla blabla

Nun möchte ich ein Script schreiben, bei welchem ich 3 Argumente übermittele. Diese sind Spalte1, Spalte2 und Spalte3 der Ausgangsdatei.

Bsp.: script.sh Test1 blabla blabla

Das Script soll nun nach dem ersten Argument ("Test1") suchen und die komplette Zeile durch die 3 neuen Argumente ersetzen. Ist das einigermaßen verständlich ausgedrückt?!

Bsp.: script.sh /Test1 blubb blubb --> Ersetzt "/Test1 blabla blabla" durch "/Test1 blubb blubb"

Wollte das ganze mittels sed machen, bin aber sehr neu in dem Gebiet und scheitere .. wie könnt ich das generell anstellen?!

Die Datei soll auch in ihrer Gesamtstruktur so erhalten bleiben, dh. Test1 soll nach dem bearbeiten weiter an erster Stelle stehen und Test6 bspw. an 6-Stelle.

Vorschläge?!
 
Code:
sed '/Test1 /s/.*/\/Test1 blub blub/g' text.txt

Ich hoffe das hilft. Das ersetzt alle Zeilen aus text.txt , in der "/Test1 " enthalten ist durch eine Zeile "/Test1 blub blub".
 
Danke dir, hab es mittlerweile auch selbst hinbekommen!

Code:
CURRENTLINE=$(cat Text.txt | grep -w "$1")
CELL=$(echo "$1" "$2" "$3")
sed "s|$CURRENTLINE|$CELL|" Text.txt >Text2.txt

so funktioniert das dann auch dahingehend, dass bei der Suche wirklich nur Test1 ersetzt wird und nicht auch Test11 etc.

Grüße
 
Hätte bei meinem auch funktioniert. Genau deswegen ist da ein leer nach dem Test1 ;)

Aber schön das es jetzt funzt.
 
Achso? Muss ich moin gleich mal ausprobieren ;)

Aber jetzt nochmal was anderes:

Angenommen die Zeilen haben unterschiedliche Spaltenbreiten. 2, 4, 6, 8 oder 12 Zeichen breit. Nun soll die erste Spalte in allen Zeilen die Größe der maximalen Spaltenbreite bekommen. Wie realisier ich das?!

Würd es mit awk versuchen:

Code:
length($1) > max { max = length($1)}
END {print max}

So hab ich zumindest die maximale Spaltenbreite der ersten Spalte, nur wie bekomm ich die restlichen Spalten auf die Breite angepasst?!
 
Code:
printf "%20s %10s %5d\n" "string1" "string2" 1337

Damit werden die Zeichen rechtsbündig. Wenn du sie lieber linksbündig haben willst einfach ein Minuszeichen zwischen % und die Zahl. Statt der Zahlen kannst du auch Variablen einsetzen.
 
Hat alles soweit geklappt .. jetzt möchte ich nur noch die Eingabe der Argumente gegen "Falscheingabe" schützen!

Soll heißen:

1. Argument muss mit einem "/" beginnen

2. Argument muss im Namen entweder "abc" oder "def" enthalten, können aber zusätzlich noch andere Buchstaben sein

3. Argument muss verschiedene "/" enthalten (Bsp.: /tmp/vol)

Wie bekomm ich das hin?!

Hatte mir überlegt das ganze über eine if-Abfrage zu realisieren

Code:
if ( $1 != "/" )
then exit
fi

Aber so ganz funktioniert es nicht .. Vorschläge?!

Achja, wie man sieht soll das Skript bei falscher Eingabe abgebrochen werden!

MfG
 
Zurück
Oben