Ich habe eine Liste von Benutzern aus /etc/group. Ich möchte diese Zeile grundsätzlich in eine Spalte formatieren, ich brauche nur die Benutzer. Wenn ein Feld also so aussieht:
bob,john,jane,sam,joyce
Dann hätte ich es gerne so
bob
john
jane
sam
joyce
Ich weiß, wie man das Gegenteil macht, aber nicht diese Art.
Antwort1
Dies können Sie mit sed tun:
sed 's/,/\n/g'
Dies ersetzt alle Vorkommen ,
durch einen Zeilenumbruch. g
bewirkt, dass sed alle Vorkommen in einer Zeile ersetzt, nicht nur das erste.
Antwort2
So antworten Sie mit Ihren vorgeschlagenen Tags:
bash:
$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce
awk:
$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce
Das $1=$1
Bit ist eine Awk-Redewendung, um den aktuellen Datensatz unter Verwendung der Ausgabefeldtrennzeichen neu zu schreiben, was nicht geschieht, sofern nicht ein Feld geändert wird.
Antwort3
Antwort4
Wenn Sie awk verwenden möchten (ähnlich wieAlle Felder mit AWK durch OFS getrennt drucken):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'