2016-04-28 22 views
5

Ich habe viel Text in Kleinbuchstaben, nur das Problem ist, dass es viele Sonderzeichen gibt, die ich alle mit Zahlen auch entfernen möchte.Entfernen aller Sonderzeichen aus einer Zeichenfolge in Bash

Nächster Befehl ist es nicht stark genug:

tr -cd '[alpha]\n ' 

Bei éćščž und einige andere es gibt „?“ Aber ich möchte sie alle entfernen. Gibt es einen stärkeren Befehl?

Ich benutze Linux Mint 4.3.8 (1) -release

+3

Jedes Zeichen ist auf seine Art besonders. –

+0

Ihre Frage ist nicht sehr klar. Etwas mehr Kontext zu geben, würde vielleicht hilfreichere Antworten aufzeigen. –

Antwort

11

Sie können tr verwenden, um nur die druckbaren Zeichen aus einer Zeichenfolge wie unten zu drucken. Verwenden Sie einfach den folgenden Befehl in Ihrer Eingabedatei.

tr -cd "[:print:]\n" < file1 

Das Flag -d ist nicht auf die Zeichensätze in den Argumenten auf dem Eingabestrom definiert löschen soll, und -c ist zur Ergänzung diejenigen (Invert was vorgesehen ist). Also ohne -c würde der Befehl alle druckbaren Zeichen aus dem Eingabestrom löschen und die Verwendung ergänzt es durch Entfernen der nicht druckbare Zeichen. Wir behalten auch das Newline-Zeichen \n, um die Zeilenenden in der Eingabedatei beizubehalten. Das Entfernen würde nur die endgültige Ausgabe in einer großen Linie erzeugen.

Die [:print:] ist nur ein POSIX bracket expression, die eine Kombination von Ausdrücken ist [:alnum:], [:punct:] und Raum. Die [:alnum:] ist die gleiche wie [0-9A-Za-z] und [:punct:] umfasst Zeichen !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

2

Ich bin nicht genau sicher, wo der Text von in Frage kommt, sondern können nur sagen, dass die „viel Text in Kleinbuchstaben“ in der ist Datei mit dem Namen special.txt Sie so etwas wie das folgende tun könnte, aber sich auf die Zeichen, die Sie behalten möchten:

cat special.txt | sed 's/[^a-z A-Z]//g' 

Es ist ein bisschen wie wenn der Operation mit einer Axt zu tun.

Eine andere mögliche Lösung in der Post Remove non-ascii characters from ...

Wenn die oben genannten Sie Ihre Frage nicht lösen, versuchen Sie es ein bisschen mehr Details zu bieten und ich könnte eine verwertbare Antwort geben können.