2017-05-05 7 views
0

Ich habe einen Code geschrieben, der alle Ordner in der Datei überprüft und eine Regex-Anweisung zu ihnen passt, aber es gibt einen Unterordner in dem Verzeichnis, in dem ich es eingeben und die Regex aber immer ausführen soll ich betreibe den Code es gibt mir diesen FehlerSED kann Unterverzeichnis nicht öffnen

sed: couldn't edit TestFolder: not a regular file

ich sah alles habe so über und das Internet und kann nichts hilfreich

ich habe versucht, den Code zu verwenden, die ich gefunden habe um mein Problem zu beheben, aber es hilft nicht, also entschuldige ich mich für den potenziell abscheulichen Code, der aus verschiedenen Quellen stammt

`pwd = "$PWD" 
find $pwd = -print | xargs -0 sed -i "/10.0.0.10/d" !(test.sh) 

Meine Verzeichnisstruktur folgt

Test -one.txt -two.txt TestFolder -three.txt

Antwort

2

Mit GNU finden, GNU xargs und GNU sed:

find . -type f -not -name 'test.sh' -print0 | xargs -0 sed -i '/\<10\.0\.0\.10\>/d' 
+0

Die ursprüngliche Lösung hat gut funktioniert, können Sie den Zweck der Trennung erklären der Ausdruck mit '\'? –

+0

Das Original funktionierte nicht, Sie hatten einfach nicht bemerkt, dass es scheiterte, vielleicht weil Sie es nicht gegen Eingaben gelaufen waren, die die Fehler erzeugten. '.' ist ein Regexp-Metazeichen, das mit einem beliebigen Zeichen übereinstimmt, sodass'/10.0.0.10/d' Zeilen löscht, die Zeichenfolgen wie '10X010Y10' enthalten. Wenn Sie die '.'s zurücklassen, werden sie als Literal bezeichnet, sodass sie nur den beabsichtigten Strings mit' .'s entsprechen. Sie benötigen auch mindestens Wortgrenzen, so dass '10 \ .0 \ .0 \ .10' nicht mit einem Teil von' 510.0.0.103' oder ähnlichem übereinstimmt. Ohne Ihre Eingabedateien zu sehen, was Sie sonst noch brauchen könnten. –

+1

keine Notwendigkeit für Xargs hier, 'finden. -type f -not -name 'test.sh' -exec sed -i '/\<10\.0\.0\10\>/d' {} + 'wird für jeden Dateinamen auch mit tun Leerzeichen, Zeilenumbrüche, etc ... – Sundeep

Verwandte Themen