Die eigentliche Frage ist also: Hat jemand eine Idee, wie man M-BM-
Sonderzeichen entfernt, ohne das Risiko einzugehen, andere Zeichen zu verlieren?
Ich habe eine Textfolge:
" . . ."
das ist
space dot space dot space dot
Ich versuche, alle Vorkommen dieser Zeichenfolge in der Textdatei zu ersetzen
"..."
das ist
dot dot dot
Ich habe versucht mit sed zu tun:
sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots
Leider ändert es die Eingabedatei nicht einmal ein bisschen. Datei: https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots
Wenn ich versuche, dieselbe Zeichenfolge im Texteditor zu ersetzen (ich verwende geany), wird sie gefunden und ordnungsgemäß ersetzt.
Der einzige Grund, an den ich denken kann, ist, dass einige (oder alle) dieser Räume nicht wirklich Räume sind, sondern ein besonderer Charakter.
Hat jemand eine Idee, wie man diese Zeichenfolge findet und durch sed (oder ein anderes Befehlszeilenprogramm) ersetzt? Bitte testen Sie Ihre Idee in meiner Datei, da das Problem nicht so offensichtlich ist, wie es scheint - deshalb habe ich danach gefragt.
Nach der Verwendung von cat -A
myfile scheint es ein Problem zu sein, dass diese Leerzeichen keine Leerzeichen, sondern M-BM-
Sonderzeichen sind. Die Verwendung eines .
für die Suche vorgeschlagenen Symbols ist keine gute Idee, da das Risiko besteht, dass einige andere Zeichen entfernt werden.
quelle
echo
eine Datei zu verwenden, anstatt sie zu kattieren. Zumindest wenn Sie eine Datei katzen, wissen Sie, dass die Shell nichts interpretiert und Echo auch nicht.cat
-sed
laden Sie einfach die Datei (gemäß dem Beispiel des OP), speichern-i
Sie sie jedoch nicht inline (entfernen Sie sie , damit Sie die Ausgabe sehen und testen können).cat -A sed-dots
, können Sie sehen, dass die "Leerzeichen" zwischen den Punkten Sonderzeichen sindM-BM-
... Ich bin mir nicht sicher, wie sie sich dort eingeschlichen haben, aber sie müssen ersetzt werden. Wenn Sie sie nicht gut anvisieren können, funktioniert dies:sed -r 's/(\s\..\..\.)/ dot dot dot/ig' sed-dots
Versuchen Sie Folgendes, um alle "." Durch "." Zu ersetzen.
Aber für ". . ." zu "..."
quelle
Ich könnte Ihre Datei verwenden, wenn ich sie durchlaufen habe:
Dies funktionierte ohne einen Konvertierungsschritt:
quelle