Wenn ich eine Zeile habe als:
Thhiisss iisss mmyyy nameeee
Ich möchte dies ausdrucken als:
This is my name
Was ist der Unix-Befehl dafür?
Wenn ich eine Zeile habe als:
Thhiisss iisss mmyyy nameeee
Ich möchte dies ausdrucken als:
This is my name
Was ist der Unix-Befehl dafür?
Antworten:
Auf einem GNU-System müssen Sie sed
o.ä. verwenden, wenn Ihr Gebietsschema Mehrbyte- Zeichen verwendet ( wie von Jimmy vorgeschlagen ), da GNU tr
nur auf ein Zeichen pro Byte verweisen kann. In einem ASCII-Gebietsschema können Sie alle Duplikate entfernen, die tr
wie folgt aussehen:
LC_ALL=C tr -s '\0-\255' <input
So...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... druckt ...
This is my name
Sie können dies auch selektiv tun, indem Sie sich nach Reichweite auf Ihre Ziele beziehen:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...oder...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... welche das Gleiche sind und welche beide ausgeben:
Thhiisss iisss mmyyy nameeee
... oder Gebrauch [:punct:]
, [:digit:]
, [:lower:]
, [:alpha:]
oder was auch immer Sie möchten. Sie können die Auswahl auch annullieren, wenn -c
...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... druckt ...
TTTThis is my name