![Der Befehl cat scheint am Ende jeder Zeile ein zusätzliches $-Zeichen hinzuzufügen](https://rvso.com/image/89138/Der%20Befehl%20cat%20scheint%20am%20Ende%20jeder%20Zeile%20ein%20zus%C3%A4tzliches%20%24-Zeichen%20hinzuzuf%C3%BCgen.png)
Ich versuche, eine Datei zu erstellen, und es sieht so aus, als würde der Editor am Ende jeder Zeile vi
ein hinzufügen . Ich weiß nicht, woran das liegt oder wie ich es verhindern kann.$
vi
vi file.txt
12345
abcde
cat -v -e file.txt
12345$
abcde$
wc file.txt
2 2 12
Ich möchte diese Symbole am Ende nicht $
, da sie meine Automatisierungsdateien beschädigen, die von der Zeichenanzahl abhängen. Warum zeigt die Wortanzahl 12 Zeichen an, wenn jede Zeile tatsächlich 5 Zeichen hat?
VIM-Version 7.4.629
Antwort1
Der Kommentar von @steeldriver ist richtig: cat
zeigt Zeilenenden mit an $
(wie vi
es der Fall wäre, wenn Sie nett darum gebeten hätten, indem Sie „:set list“ verwenden). Das zusätzliche Zeichen pro Zeile ist das Newline (ein unsichtbares Zeichen am Ende jeder Textzeile).
Wenn Sie nur die Anzahl derdruckbarText, Sie könnten die Datei vor der Verarbeitung filtern wc
, z. B. tr
mit der -d
Option. Hier ist ein Skript, das sich selbst als Beispiel zählt:
#!/bin/sh
cat $0 |wc
cat $0 | tr -d '\r\n\t' | wc
cat $0 | tr -d '[:cntrl:]' |wc
obwohl die letzte Zeile möglicherweise nicht portabel genug für Ihre Verwendung ist (sie ist inPOSIX, imerweitertAbschnitt). Aber es läuft auf allem, was Sie wahrscheinlich verwenden werden, basierend auf den Hinweisen in der Begründung.