Ich benutze Linux. Irgendwo in Tausenden von Konfigurationsdateien ist ein lästiges ^ M (Windows Carriage Return) versteckt.
Wie finde ich ^ M in einer Verzeichnishierarchie voller Konfigurationsdateien?
Ich denke, ich kann in der Bash-Kommandozeile nicht ^ M eingeben. Aber ich habe es in einer Textdatei, die ich m.txt genannt habe
Antworten:
Benutzen
-r
für rekursive Suche und$''
für die Flucht im C-Stil in Bash.Wenn Sie sich jedoch sicher sind, dass es sich um eine Textdatei handelt, sollte sie sicher ausgeführt werden können
alle entfernen
\r
in einer Datei.Wenn Sie GNU verwenden
sed
.-i
kann direkt bearbeitet werden, sodass Sie nicht zurückschreiben müssen:quelle
$'\r'
.$'
Lesen Sie den ersten Treffer in der Manpagebash(1)
Im Grunde können Sie es so sehen, als würden Sie eine C-Literal-Zeichenfolge schreiben. Wie für diecommand < filename
, die Verwendung von<
oder>
wird genannt Weiterleitung Dies ist das erste Mal, dass ich jemanden genannt habe größerer Ausdruck . SucheREDIRECTION
imbash(1)
.Als ich es versuchte, konnte ich feststellen, dass es irgendwie funktionierte, aber die Zeilen druckten leer. In der Option hinzufügen:
Wenn Sie dieses Problem erhalten, denke ich, dass es die Escape-Zeichen für die farbliche Hervorhebung sind, die das Problem stört
\r
Charakter.quelle
Wenn Ihr Server keine Bash-Shell hat, können Sie alternativ die
-f
Option eingrep
in Kombination mit einer vorbereiteten Datei mit\r
.So erstellen Sie die Datei:
Um die Suche tatsächlich durchzuführen
oder Sie können ein wenig faul sein und einfach * eingeben,
Das
-f Dateiname
Option eingrep
wird verwendet, um eine Datei anzugeben, die übereinstimmende Muster enthält (eines pro Zeile). In diesem Fall gibt es nur ein Muster.quelle
Um grep für Zeilenendezeichen verwenden zu können, müssen Sie wahrscheinlich sagen, dass die Datei binär ist.
-l (Buchstabe L) dient nur zum Drucken des Dateinamens
-P ist für Perl Regex (also \ x0d wird in \ r oder ^ M umgewandelt)
quelle
Wenn Sie sich auf einem Mac befinden und verwenden Homebrew , du kannst tun:
um alle Windows-Wagenrückläufe zu entfernen file.txt
Um zu Windows-Wagenrückläufen zurückzukehren,
quelle
Im regulären Ausdrucksstil verschiedene Zeilenumbrüche:
Windows (CR LF)
\r\n
Unix (LF)
\n
Seit der
\r\n
Sequenz ist ziemlich einzigartig, ich denke, Sie sollten auf diese Weise danach suchen können?Um es noch schlimmer zu machen, hatten Macs bisher nur '\ r' anstelle von Zeilenumbrüchen. Ich kann das nicht bestätigen, aber ich glaube nicht, dass MacOSX-Generationen das mehr tun.
Ältere Macs (CR)
\r
quelle
grep "\r\n" *
gibt kein Ergebnis. Kein Ergebnis füregrep -e "\r\n" *
Nochgrep -E "\r\n" *
\r
mein Fehler. Ein Full Windows-Newline ist in der Tat\r\n
oder CRLFNach den vorherigen Antworten ist die 'tr'-Methode gut:
533 $ wenn [[-n "
tr -cd "\r" <~/.bashrc
"]]; dann Echo" DOS "; ansonsten Echo" UNIX ";UNIX
534 $ wenn [[-n "
tr -cd "\r" <dosfile.txt
"]]; dann Echo" DOS "; ansonsten Echo" UNIX ";DOS
quelle