So entfernen Sie Strg + F in einer Unix-Datei

7

Während ich eine Unix-Datei bearbeite, erhalte ich die Daten wie folgt im vi-Editor.

MGW:^FVMG107
MGW:^FVMG113
MGW:^FVMG108
MGW:^FVMG103

wo oben Daten ^Fsind im catBefehl nicht sichtbar . Ich habe es versucht dos2unixund sedauch, aber es existiert immer noch. Wie kann ich entfernen^F

user73553
quelle

Antworten:

15

^F sagt Ihnen vim, dass es dort ein nicht druckbares Zeichen 0x06 gibt (F ist der sechste Buchstabe des Alphabets, sie reichen von '^ @', '^ A', '^ B' ... '^ Y', '^ Z '.' ^ [',' ^ \ ',' ^] ',' ^^ ',' ^ _ ')

Ich hatte kein Problem damit, es grafisch in vim, nano, joe ... sed -i 's/\x06//g' filenamezu entfernen. Wenn Sie jedoch einen Befehlszeilenansatz bevorzugen und wissen, dass es sich um das Zeichen 0x06 handelt, können Sie es verwenden , um es zu entfernen.

PS: Ich befürchte, dass die Polym-Lösung zum Entfernen von ^ F on cat -vnur funktioniert, wenn Ihre Datei keine anderen nicht druckbaren Zeichen enthält, die beschädigt werden könnten.

Engel
quelle
2

Wie Ángel sagt, bezeichnet ^Fin vioder die Ausgabe von cat -vein 06-Zeichen. Eine andere Möglichkeit, diese Charaktere loszuwerden, ist

tr -d "\06" < oldfile > newfile
Scott
quelle
2

Bearbeiten: Wie Angel erwähnt hat, sollten Sie diese Lösung nicht verwenden, da dies zu unerwünschten Änderungen führen kann.

Seine Lösung (hex ( ^F) == \x06):

sed -i 's/\x06//g' filename

Meine (unsachgemäße) Lösung:

cat -v oldfile | sed 's/\^F//g' > newfile

Sollte es tun.

polym
quelle
3
Wie Ángel weiter unten sagt, führt dies möglicherweise zu anderen unerwünschten Änderungen am Inhalt der Datei - dies ist keine sehr allgemeine Antwort auf die Frage.
Godlygeek
Zusätzlich zu Ángels Kommentar (der sich auf die Funktionalität von bezieht cat -v) führt dies auch zu einer Beschädigung, wenn die Datei ^Zeichen enthält, denen unmittelbar FZeichen folgen .
Scott
@godlygeek und Scott danke für die Info :)!
Polym
0

Da Sie mit der Datei in vim arbeiten, können Sie dies auch in vi / vim beheben. Sie können diese Zeichen mit Strg-V und dann mit Strg- eingeben. Dafür ist es crtl-v, gefolgt von ctrl-f.

Sie können also ein einfaches Suchen / Ersetzen verwenden:

:%s/^F//

Das würde in allen Zeilen (%) funktionieren und (s), die erste Instanz von ^ F, durch nichts ersetzen und sie effektiv entfernen.

Wenn Sie versteckte Zeichen in Dateien anstelle von cat sehen möchten, verwenden Sie od -c:

od -c <file name>

zB aber ein ^ F und zwei Zeilenenden in eine Datei einfügen:

alex@Smiley:/tmp|⇒  cat test


alex@Smiley:/tmp|⇒  od -c test
0000000  006  \n  \n
0000003

Dies druckt alle Zeichen aus, einschließlich Tabulatoren, Zeilenenden usw.

Wenn Sie sed verwenden möchten, können Sie denselben Strg-V- und CRTL-Trick auch direkt in der Befehlszeile verwenden. Auf diese Weise müssen Sie sich nicht an die Übersetzung erinnern.

Alex
quelle