2016-04-24 10 views
0

Ich habe seit mehr als einer Stunde versucht, im Terminal unter Mac OS X einen Stapel zu suchen und zu ersetzen. Ich habe verschiedene Versionen von Code gefunden, aber ich habe Schwierigkeiten, es zu funktionieren. Bisher habe ich eine Codezeile gefunden, die funktioniert, aber sie funktioniert nur für einen Begriff/ein Zeichen.Terminal-Befehl zum Suchen und Ersetzen von Stapeln

Was ich tun möchte, ist mehrere Zeichen in einer Textdatei zu finden und zu ersetzen, alle zur gleichen Zeit.

Zum Beispiel:

§ finden, ersetzen mit ก
Suche Ø, ersetzen mit ด
Suche ≠, mit £ ห
Suche ersetzen, wechseln mit ้

Der Code, der funktioniert soweit (ist aber nur für ein Zeichen):

sed -i '' s/Ø/ด/ [textfile.txt] 

Könnte ein Könnt ihr mir bitte helfen?

+0

Erste Zeile des Beispiels, das ich gelesen habe, ersetzen ein "Absatzzeichen" mit "etwas, das nicht klar ist", möglicherweise von einem nicht lateinischen Alphabet. Das Absatzzeichen ist, was du meintest oder es gibt ein Problem mit der Kodierung der Charaktere? – gboffi

+0

Es liegt an nicht-lateinischen Zeichen. Die finden diejenigen, die ich denke, sind Latein, aber nicht die ersetzen. – samseva

+0

Ja, das Absatzzeichen ist das, was ich meinte (genauso wie die "nicht gleich" - und Pfundsymbole). – samseva

Antwort

0

Ihr Muster der Verwendung so verbreitet ist, dass es ein bestimmtes Dienstprogramm Sie es verwenden können, nämlich tr

tr abc ABC <input.txt> output.txt 

, wo man zwei Strings verwenden (hier abc und ABC) tr auf den Substitutionen instruieren Sie wollen (hier, a mit A, b mit B etc ersetzen).


Mit sed, das ist viel allgemeiner in seiner Anwendung in Bezug auf tr, in jeder Zeile das erste Vorkommen zu suchen und ersetzen Sie es

ist
sed 's/src1/rep1/' <in> out 

jedes Vorkommen in jeder Zeile zu suchen und ersetzen fügen Sie einen g Schalter auf die s Befehl

sed 's/src1/rep1/g' <in> out 

schließlich mehrere Such ein zu tun d ersetzt Sie die s Befehle mit einem Semikolon trennen müssen

sed 's/src1/rep1/g;s/src2/rep2/;s/src3/rep3/g' <in> out 

Beachten Sie, dass im obigen Beispiel verwendete ich den g Schalter (zeilenweise globale Substitution) für die 1. und die 3. finden & ersetzen und nicht für die 2. eine ... Ihre Verwendung kann anders sein, aber ich hoffe, dass Sie das Muster entdeckt haben, nicht wahr?

+0

Ich habe den Code ausprobiert und es funktioniert. Wüssten Sie jedoch, welchen Code Sie hinzufügen möchten, damit Sie mehrere Wörter/Zeichen auf einmal finden und suchen können? – samseva

+0

Versuchte den Code. Ich werde alle Informationen präsentieren, um sicherzustellen, dass alles in Ordnung ist. 1. Ich habe eine TXT-Datei mit dem Namen "TestBefore.txt" mit dem Text "¢ ‡ ≠ §ØÄɧæõ/É ‡ Ω" erstellt. 2.Der folgende Code wurde in Terminal eingegeben (entfernter Benutzer): 'sed 's/¢/ก/g; s/§/ด /; s/Ä/า/g'> /Users/[...]/Desktop/TestBefore .txt>/Benutzer /[...]/ Desktop/TestAfter.txt'. 3. Das erstellte eine neue "TestAfter.txt" Datei aber ohne Text darin. Dadurch wurde auch der gesamte Text in der ursprünglichen Datei "TestBefore.txt" entfernt. Wie kommt es dazu? – samseva

+0

Mein Fehler, im ersten und zweiten Beispiel habe ich "< in > out" verwendet, aber im dritten Beispiel (das, das du kopiert hast) habe ich mich vertippt "> in> out" und das; s was du in deinem Test mit kopiert hast das zwei "größere" Zeichen. Das "Minor" -Zeichen steht für "nehme die Eingabe von der folgenden Datei", während das "Größere" für "Put-Ausgabe in die folgende Datei" bedeutet, was wir getan haben, ist falsch ,,, versuchen '/Users /[...]/ Desktop/TestAfter.txt' --- Bitte beachte, dass ich meine Antwort bearbeiten werde, um den Fehler zu korrigieren. – gboffi