Der Befehl cat scheint am Ende jeder Zeile ein zusätzliches $-Zeichen hinzuzufügen

Der Befehl cat scheint am Ende jeder Zeile ein zusätzliches $-Zeichen hinzuzufügen

Ich versuche, eine Datei zu erstellen, und es sieht so aus, als würde der Editor am Ende jeder Zeile viein 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: catzeigt Zeilenenden mit an $(wie vies 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. trmit der -dOption. 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.

verwandte Informationen