PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IF-Bedingung als verknüpfter Befehl



clumsy
12-05-2006, 11:33
Servus,

will sowas vom Prinzip her machen:


while read line; do
if [ `echo "$line" | egrep -e "Pro" `]; then
echo "Pro ist enthalten in $line";
fi;
done < projcfg.tmp


Das Problem ist nur die If-Abfrage. Ich will schauen, ob in $line ein bestimmtes Wort vorkommt, wenn ja, soll irgendwas anderes passieren....aber ich bekomms ums Verrecken nicht hin!

clumsy

Caveman
12-05-2006, 11:40
Ich denke, vor der "]" fehlt noch ein Leerzeichen.

Edit: und auch dahinter
Edit2: egrep -e gibt einen String zurück (die Zeile in der "Pro" vorkommt) - es sollte also eher grep -c "Pro" heißen (gibt die Anzahl der Zeilen zurück)
Edit3: oder noch besser: grep -q "Pro"

Joghurt
12-05-2006, 12:09
In diesem Falle brauchst du sogar gar nicht test (oder das alias [)


if echo $line | grep -q "Pro"; then
echo Pro ist in $line
fi

clumsy
12-05-2006, 13:08
super, danke.
aber jetzt hab ich größeres Problem. Anscheinend entfernt "read line" Backslashes aus einer Zeile!



while read line; do
echo "LINE vor IF: \t $line"
if echo $line | grep -q "^CFG.*cfg$" ; then
echo "LINE nach IF: \t $line"
echo "line IF: $line"
fi

done < projcfg.tmp


wobei projcfg.tmp so aussieht:


[Project=Name Nummer 1]
CFG=P:\Pfad\des\Grauens\name1.cfg
[Project=Name Nummer 2]
CFG=P:\Pfad\des\Grauens\name2.cfg
[Project=Name Nummer 3]
CFG=P:\Pfad\des\Grauens\name3.cfg


Ergebnis:


LINE vor IF: CFG=P:PfaddesGrauensname1.cfg
LINE nach IF: CFG=P:PfaddesGrauensname1.cfg
usw.


Warum werden die Backslashes entfernt? Wie kann ich das vermeiden?

clumsy

Joghurt
12-05-2006, 13:11
If the -r option is given, this signifies `raw' input, and backslash escaping is disabled. Also "read -r line"

clumsy
12-05-2006, 13:33
ne, geht leider nicht...


LINE vor IF: [Project=Name Nummer 1]
LINE vor IF: CFG=P:\Pfad\des\Grauens
ame1.cfg
LINE vor IF: [Project=Name Nummer 2]
LINE vor IF: CFG=P:\Pfad\des\Grauens
ame2.cfg
LINE vor IF: [Project=Name Nummer 3]
LINE vor IF: CFG=P:\Pfad\des\Grauens
ame3.cfg


mit meiner "richtigen" (also nicht dieser Bsp-Datei) sieht das noch um welten schlimmer aus, d.h. es fehlen Buchstaben, es gibt neue Zeilen und Tabs.

so wie´s aussieht, gelten newlines \n, tabs \t usw. weiterhin...was ich natürlich in der verarbeitung nicht brauchen kann...

Joghurt
12-05-2006, 15:01
Das liegt dann an deinem Echo. Das interpretiert \t und \n als Tab und newline.

Eigentlich sollte es das nur bei der Option -e tun. Welche Shell nutzt du denn?

(Versuch mal Option -E (groß E: escape disabled, klein e: escape enabled))

clumsy
12-05-2006, 17:13
ist ein HP-UX-rechner. nutze die bash...

werd das -E mal testen, bin aber grad nicht davor ;)