Einträge aus String herausschneiden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
FreakyFrank
Beiträge: 28
Registriert: 12.10.2004 15:12:41

Einträge aus String herausschneiden

Beitrag von FreakyFrank » 14.12.2004 21:44:34

Hallo mal wieder ne Frage zur Bashprogrammierung:
Ich habe eine liste mit verzeichnissen in einem string stehen. Sie sind mit Leezeichen getrennt und stehen in einer Linie. Ich lasse die Verzeichnisse mittels test -d auf vorhandensein testen und möchte sie dann wenn sie nicht existieren aus dem string entfernen.
Grep funktioniert bei mir nicht so richtig weil es mir immer dann die komplette Liste / Linie herausschneidet.

z.b

Code: Alles auswählen

 
dirlist="dir1 dir2 dir3 dir4 dir5 usw"

for verzeichnis in $dirlist
do
        if test -d /pfad_zu_dirs/$verzeichnis
        then
        machwas
        else
        dirlist=`echo $dirlist | grep -v '<\$verzeichnis\>'`
        echo "$dirlist" 
        fi

done
Ich denke mal daß das mit sed oder gawk genausowenig funktioniert, weil die ja auch zeilenweise arbeiten. Gibts da irgendwelche Möglichkeiten bei grep mittels Optionflags das dementsprechend doch zu ermöglichen, oder muß ich da zu nem andrem Programm greifen?
Wenn ja welche gibt es da?

Danke für die Hilfe

Frank

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 14.12.2004 21:57:36

mit sed und awk geht es sicher, aber ist folgender Ansatz nicht auch eine Lösung:

Code: Alles auswählen

dirlist="dir1 dir2 dir3 dir4 dir5"

founddirs=""

for verzeichnis in $dirlist;
do
 if test -d /pfad_zu_dirs/$verzeichnis
  then
   founddirs="$founddirs $verzeichnis"
   echo $founddirs
 fi
done
echo $founddirs

Benutzeravatar
FreakyFrank
Beiträge: 28
Registriert: 12.10.2004 15:12:41

Beitrag von FreakyFrank » 14.12.2004 22:13:00

Hallo,
habe selber auch noch eine Lösung gefunden
Ich kann mit sed jedes Leerzeichen durch ein newline ersetzen lassen, und dann mit meinem grep befehl weiterbearbeiten. Das sieht dann so aus:

Code: Alles auswählen

echo $dirlist | sed 's/[[:space:]]/\n/g'     
Frank

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 14.12.2004 22:26:11

so funktionierts mit awk:

Code: Alles auswählen

dirlist="dir1 dir2 dir3 dir4 dir5"
verzeichnis=dir5

dirlist=`echo $dirlist | awk "{ sub(/(^| *)$verzeichnis( *|$)/,\" \"); print ; }"`
echo $dirlist

Antworten