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
Die ursprüngliche Lösung hat gut funktioniert, können Sie den Zweck der Trennung erklären der Ausdruck mit '\'? –
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. –
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