PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus einem String -> Teilstring herausschneiden



Chito
04-04-2008, 17:05
Hallo!

Ich habe folgendes Problem:

Aus einem String in einer Variable möchte ich einen Teil wegschneiden und die übrigen String in einer weiteren Variable ablegen.

Dazu mein Code:

# sucht den gewuenschten Eintrag heraus und uebergibt den Eintrag an $SEARCH_ENTRY
SEARCH_ENTRY=`grep -i $DEL_FILE $BIN_DIR`
echo SEARCH_ENTRY: $SEARCH_ENTRY <== Ist der String!!!

# soll
FIND_DIR=`cat $SEARCH_ENTRY | grep "\$DEL_FILE " |awk '{print $3}'`
echo FIND_DIR: $FIND_DIR <== Hier soll der Teilstring stehen


Ausgabe:

SEARCH_ENTRY: 0564783656345734_1756.dat /home/user/ordner
cat: /home/user/ordner: Is a directory
FIND_DIR: <== hier soll nur "/home/user/ordner stehen!!! Ich weiß nicht wie cat dazu kommt sowas auszugeben
Prinzipiell gibt cat schon schon den gewünschten String aus ... aber schreib den nicht in die Variable :(



Wie setze ich das am besten um? Ich sitze schon seit Stunden an dem Problem und finde einfach keine LÖsung.

Ich bitte um eure MIthilfe ;)

Gruss

Chito

ContainerDriver
04-04-2008, 17:22
Hallo.


# sucht den gewuenschten Eintrag heraus und uebergibt den Eintrag an $SEARCH_ENTRY
SEARCH_ENTRY=`grep -i $DEL_FILE $BIN_DIR`
echo SEARCH_ENTRY: $SEARCH_ENTRY <== Ist der String!!!

# soll
FIND_DIR=`cat $SEARCH_ENTRY | grep "\$DEL_FILE " |awk '{print $3}'`
echo FIND_DIR: $FIND_DIR <== Hier soll der Teilstring stehen


Ausgabe:

SEARCH_ENTRY: 0564783656345734_1756.dat /home/user/ordner
cat: /home/user/ordner: Is a directory
FIND_DIR: <== hier soll nur "/home/user/ordner stehen!!! Ich weiß nicht wie cat dazu kommt sowas auszugeben
Prinzipiell gibt cat schon schon den gewünschten String aus ... aber schreib den nicht in die Variable :(


Die Befehlskette


cat $SEARCH_ENTRY | grep "\$DEL_FILE " |awk '{print $3}'

ruft zuerst cat auf und gibt den Inhalt von der Datei (!) $SEARCH_ENTRY an grep weiter. grep sucht dann in der Ausgabe von cat nach $DEL_FILE und gibt die Zeile aus. awk wiederum gibt den dritten String aus. Willst du das wirklich machen? Ich verstehe nämlich nicht so ganz, wo das Problem liegt.

Die Ausgabe von cat ("cat: /home/user/ordner: Is a directory") ist eine Fehlermeldung, weil du versuchst, die Datei /home/user/ordner anzeigen zu lassen. Die Fehlermeldung wird auf stderr geschrieben, deshalb erscheint sie auf dem Terminal und wird nicht weiter "gepiped".

Mit


echo $SEARCH_ENTRY | awk '{print $2}'

würdest du an den Teilstring "/home/user/ordner" kommen.

Gruß, Florian

Chito
04-04-2008, 17:39
Vielen Dank für deine schnelle Antwort. Stimmt, jetzt habe ich das erst so richtig mit dem 'awk' verstanden. *gg .... habe erst 3 Tage BASH - Erfahrung :)