2012-03-25 5 views
2

Bin ein Anfänger in Unix und ich bin gerade in einen Haken geraten. Die Bash-App, an der ich gerade arbeite, ist sehr einfach und kann Kontakte hinzufügen und Kontakte entfernen (basierend auf Vor- und Nachnamen). Im Folgenden finden Sie einen Teil meines Codes. Aus irgendeinem Grund zeigt grep die verbleibenden Kontakte an, wenn die Datei (> contacts_file) ausgeschlossen wird, speichert die Datei jedoch nicht, wenn sie eingeschlossen wird (> contacts_file). Stattdessen bleibt die 'contacts_file' leer. Wie kann ich das beheben? Oder gibt es eine bessere Möglichkeit, nach Kontakten in einer Kontaktdatei zu suchen? Format in contacts_file ist: Vorname NachnameUNIX Anfänger: grep speichern in eine Datei funktioniert nicht

echo "[Remove a contact]" 
echo "First Name: " 
read first0 
echo "Last Name: " 
read last0 
grep -vw -e "$first0 $last0" contacts_file >contacts_file 

Antwort

5

Sie können Ausgabe nicht auf die gleiche Datei verweisen, in der Sie grepping sind. Der Grund ist, dass die Shell diese Ausgabedatei zum Schreiben öffnet und daher leer macht.

Die Lösung besteht darin, die Ausgabe an eine temporäre Datei zu übergeben und dann die temporäre Datei an contacts_file zu verschieben, wenn Sie sie ersetzen möchten.