Sagen wir, " Textdatei " enthält Folgendes:
%Vor%und dass Sie jedes Wort in einer separaten Zeile drucken möchten. Jedoch sollten Wörter nicht nur durch Leerzeichen, sondern auch durch alle nicht-alphanumerischen Zeichen definiert werden. Also sollten die Ergebnisse wie folgt aussehen:
%Vor%Wie kann ich das mit der Bash-Shell erreichen?
Einige Hinweise:
Das ist keine Hausaufgabenfrage.
Der einfachere Fall, wenn die Wörter nur durch Leerzeichen bestimmt werden sollten, ist einfach. Einfach schreiben :
%Vor%führt den Trick aus und gibt Folgendes zurück:
%Vor%Für das Teilen von Wörtern mit nicht-alphanumerischen Zeichen habe ich Lösungen gefunden, die die IFS-Umgebungsvariable verwenden (Links unten), aber ich möchte IFS aus zwei Gründen vermeiden: 1) würde es erfordern (denke ich) Setzen der IFS auf eine lange Liste von nicht-alphanumerischen Zeichen. 2) Ich finde es irgendwie hässlich.
Hier sind die zwei verwandten Fragen und Antworten und Wie teile ich eine Zeichenfolge auf einem Trennzeichen in Bash?
Wie teilt man eine Zeile in Wörter auf, die durch ein oder mehrere Leerzeichen in bash getrennt sind?
Verwenden Sie den Befehl tr :
%Vor% Das ' -c
' ist für das Komplement der angegebenen Zeichen; die " -s
" verdrängt Duplikate der Ersetzungen; Die 'a-zA-Z0-9'
ist die Menge der alphanumerischen Zeichen (vielleicht auch _
?); Das '\ n' ist das Ersatzzeichen (Newline). Sie können auch eine Zeichenklasse verwenden, die für das Gebietsschema empfindlich ist (und möglicherweise mehr Zeichen enthält als die obige Liste):