Ersetzen Sie eine Zeichenkette in allen Dateien - Unix
Ich versuche, ersetzen Sie eine Zeichenfolge :::
mit ::
für alle Zeilen in eine batch-txtfiles (es kann auch als ein Wort, da gibt es immer ein Leerzeichen vor und hinter ihm.
Ich kann es mit python wie unten, aber es ist ein weniger "over-kill' /gewundenen Weg, dies zu tun durch die unix-terminal? (Viele Rohre erlaubt)
indir = "./td/"
outdir = './od/'
for infile in glob.glob(os.path.join(indir,"*")):
_,FILENAME = os.path.split()
for l in codecs.open(infile,'r','utf8').readlines():
l = l.replace(":::","::").strip()
outfile = codecs.open(os.path.join(outdir,FILENAME),'a+','utf8')
print>>outfile, l
Dann Verschiebe ich alle Dateien aus od td mv ./od/* ./td/*
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine Notwendigkeit für
od/
überhaupt.EDIT:
Einen etwas einfacheren Variante:
find
version nur als effizient, wenn Sie verwenden+
statt\;
am Ende.sed -i ... td/*.c
(mit einem globstar bei Bedarf Hinzugefügt). Und ein weiteres für die Verwendung von directory-Namen zu finden ist - "name" (siehe: linux.about.com/od/commands/l/blcmdl1_find.htm)... Wie haben Sie diese 4 Stimmen ?td/*.c
Vorschlag, aber ich wusste nicht, dass das funktionieren würde; ich würde Hinzugefügt haben, können Sie auf meine Antwort (mit Quellenangabe), wenn es war vorgeschlagen worden, mit mehr Höflichkeit../tc/*.c'' will probably evaluate to false all the time on this system. You might find the '-wholename' test more useful, or perhaps '-samefile'. Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ
./tc/*.c".`Einer einfachen Schleife, um jede Datei mit
sed
sollte ausreichen.