Ihr erstes Snippet ist nichts anderes als eine Shell-Syntax. Es ist die richtige Perl-Syntax.
Ihr zweites Snippet wird nicht cut
richtig verwendet. Ich weiß nicht, was du beabsichtigt hast.
Die Shell verfügt über ein integriertes Konstrukt zum Teilen von Zeichenfolgen: Wenn Sie $somevar
ohne Anführungszeichen schreiben , sucht die Shell zuerst nach dem Wert der Variablen somevar
, teilt diesen Wert dann in separate Wörter für die durch angegebenen Zeichen auf IFS
und interpretiert schließlich jedes Wort als Glob Muster (Datei-Platzhalter). Sie können also eine Zeichenfolge teilen, indem Sie IFS
das Trennzeichen festlegen und das Globbing vorübergehend deaktivieren.
set -f; IFS=,
arr=($stats)
set +f; unset IFS
Beachten Sie, dass das Array-Element dieses Leerzeichen beibehält, wenn ein Feld Leerzeichen enthält. Wenn Sie sowohl Leerzeichen als auch Kommas aufteilen möchten, setzen Sie IFS=', '
. Beachten Sie, dass IFS
es sich nicht um eine Zeichenfolge handelt, bei der geteilt werden soll, sondern um eine Reihe von Zeichen, bei denen geteilt werden soll. entweder ein Leerzeichen oder ein Komma bilden ein Trennzeichen. Darüber hinaus gibt es spezielle Regeln für Leerzeichen: Jede Folge von null oder mehr Leerzeichen, gefolgt von einem Komma, gefolgt von null oder mehr Leerzeichen, bildet ein Trennzeichen, und jede Folge von einem oder mehreren Leerzeichen bildet auch ein Trennzeichen.
Wenn Sie Leerzeichen nur am Anfang oder Ende eines Feldes entfernen möchten, müssen Sie dies Element für Element tun.
shopt -s extglob
for ((i=0; i<${#arr[@]}; i++)); do
arr[i]=${arr[i]#+( )} # strip one or more spaces at the beginning
arr[i]=${arr[i]%+( )} # strip one or more spaces at the end
done
awk '{ split("3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720 ",arr,","); print arr[1]; }'
ODERecho "3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720" | awk '{ split($0,arr,","); print arr[1]; }'
Das sollte funktionieren.