Sed in Place bearbeiten

8
%Vor%

Wenn stopwords ein Wort pro Zeile enthält und spam.txt eine einfache Textdatei, muss ich nur die genauen Übereinstimmungen von Stoppwörtern ersetzen. Verhalten sich nicht wie erwartet ... Beachten Sie, dass in beiden Dateien Wörter wie doesn't , couldn't vorkommen.

    
Tathagata 12.07.2011, 16:42
quelle

4 Antworten

8

Sind Sie sicher, dass Sie sed in for loop ausführen möchten? Ich würde sed Skript-Datei verwenden.

%Vor%     
Sami Kerola 12.07.2011, 16:51
quelle
8

Nun, Sie sollten "statt" in Ihrem sed-Befehl verwenden. Wenn Sie "single quote" verwenden, sagt die Shell, dass sie den $ -Term nicht ersetzen soll.

Dies:

%Vor%

Funktioniert für:

%Vor%

und:

%Vor%

meine 2 Cent

    
neuro 12.07.2011 16:54
quelle
3

@kerolasa ist auf etwas da.

Das wichtigste ist, dass Ihr $ -Term NICHT als Variable expandiert wird. Sie können Ihren Code als

schreiben %Vor%

Aber das ist eine sehr teure Operation, Sie laufen sed für jedes Wort, das in stopwords ist. Das Erstellen eines sed-Skripts per @kerolasa-Idee ist effizienter, aber es hängt davon ab, ob dies ein einmaliges Projekt ist, dann funktioniert Ihre Lösung.

Außer ... "Wörter wie nicht, konnte nicht in beiden Dateien", Ja, und? Ich bin mir nicht sicher, was du da sagst, was erwartest / willst du, warum denkst du, dass es nicht passieren wird? Das Ändern Ihrer Angebote wird Ihnen helfen.

Beachten Sie schließlich, dass diese Lösung möglicherweise unterbrochen wird, wenn Ihre Stoppwortliste Leerzeichen enthält, d. h. "Schlüssel in Arbeit" ;-).

Ich hoffe, das hilft.

    
shellter 12.07.2011 17:03
quelle
2

Anstelle der Verwendung einer temporären Datei für das Skript, wie von Sami Kerola vorgeschlagen, können Sie das Skript auch an sed weiterleiten, Erstellen Sie es von stopwords mit einer zweiten Instanz von sed :

%Vor%

Beachten Sie, dass ich , anstelle von / als Trennzeichen für die erste Instanz von sed verwendet habe, um nicht alle / anzugeben, die ich als Trennzeichen im generierten Ausdruck verwende. Aber das ist imho nur eine Frage des Geschmacks und natürlich könnten Sie auch 's/.*/s\/\<&\>\/\/g/' verwenden, wenn Sie es mehr mögen.

    
mschilli 04.06.2013 10:02
quelle

Tags und Links