Ersetzen Sie eine Zeile mit Sonderzeichen in allen Dateien rekursiv mit SED MAC

Ersetzen Sie eine Zeile mit Sonderzeichen in allen Dateien rekursiv mit SED MAC

Ich habe versucht, eine Zeile durch eine andere zu ersetzen, indem ich SEDon verwende MAC OS X Terminal . Ich habe ein Szenario, in dem ich eine Zeile in allen in einem Verzeichnis vorhandenen Dateien durch eine andere Zeile ersetzen muss. Beide Zeilen sind komplex und haben unterschiedliche Sonderzeichen und Symbole.

Wie kann ich es ersetzen?

Ich muss ersetzen

import { wait } from 'path/and-child-path'

mit

import { wait } from 'path/path/and-child-path'

Was ich versucht habe ist

find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"

Das funktioniert nicht. Bitte helfen Sie mir.

Antwort1

Das sedvon Ihnen bereitgestellte hat genau dasselbe Match-and-Replace-Muster (falls das kein Tippfehler war), Sie können also keine Änderung in den Dateien erwarten. Außerdem ''sollte das Bit nicht da sein.

Durch die Korrektur dieser Punktewürdeenden mit

find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"

Dieser Code wird trotzdem fehlschlagenim Allgemeinen, weil Dateinamen Leerzeichen (und sogar Zeilenumbrüche!) enthalten können, die genau das sind, was xargsals Trennzeichen verwendet wird. Wenn Sie also die Datei haben A X, sedwird angewiesen, auf die Dateien Aund zu reagieren X.

-execOption löst das Problem direkt:

find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +

Beachten Sie, dass ich auch hinzugefügt habe -maxdepth 1, da sonst findauch in Unterverzeichnisse gewechselt würde.

verwandte Informationen