Ich verwende ubuntu 14.4
und versuche, die Ausgabe des grep
Befehls in eine Datei umzuleiten , erhalte jedoch weiterhin den folgenden Fehler:
grep: input file 'X' is also the output
Ich habe nach diesem Problem gesucht und gerade herausgefunden, dass es sich um einen Fehler handelt ubuntu 12.4
und es keine Beschreibung gibt. Kann mir jemand helfen, dieses Problem herauszufinden?
Ich führe den folgenden Befehl aus:
grep -E -r -o -n r"%}(.*){%" > myfile
shell
ubuntu
command-line
grep
io-redirection
Kasramvd
quelle
quelle
grep pattern file > file
, funktioniert es nicht. Sie können nicht dieselbe Datei als Eingabe und Ausgabe für grep verwenden.bash: ../f.txt: Permission denied
grep
im Befehlgrep pattern file > file
bereits leere Dateien angezeigt werden und daher nichts als Eingabe vorhanden ist. Wenn Sie jedoch>>
stattdessen verwenden,>
ist die Datei nicht leer, aber grep löst trotzdem einen Fehler aus, da dies dazu führen kann, dass dieselbe Zeile (Muster) immer wieder rekursiv verarbeitet wird.Antworten:
Es ist nicht möglich, dieselbe Datei als Eingabe und Ausgabe für zu verwenden
grep
. Sie können die folgenden Alternativen in Betracht ziehen:temporäre Datei
sed
ganze Datei in die Variable einfügen (keine gute Idee für große Dateien)
quelle
sed -i '/pattern/!d' file
sed -i -n 's/.*\(pattern\).*/\1/p' file
sed
Syntax polieren kann .Sie können das
--exclude
Feld in Ihremgrep
Befehl folgendermaßen verwenden:quelle
myfile
es eindeutig ist, da es nur für den Basisnamen der Datei gilt. Sie möchten nicht gleichnamige Dateien in anderen Verzeichnissen überspringen.Ich habe einen Weg in Bash gefunden:
cat >> IN_OUTPUT_FILE <<< "$(grep something IN_OUTPUT_FILE)"
Der Befehl in
<<<"..."
wird zuerst ausgeführt.quelle