Comment pourrais-je simplifier cette command pour utiliser seulement awk?

awk '/user/ {print $1 }' /etc/userdomains | sed 's/://' 

le format de / etc / userdomains est

 domain.tld: user otherdomain.tld: otheruser 

La méthode la plus simple consiste à définir le séparateur de champs sur ":"

 awk -F":" '$2~/user/{print $1}' /etc/userdomains And if you want to check for exact username, awk -F"[ \t]*:[ \t]*" '$2=="user"{print $1}' /etc/userdomains 

awk a une fonction sub(regexp, replacement, target) qui trouve la première occurrence de regexp dans la target ( $0 par défaut) et la remplace par replacement (in-place):

 awk '/user/ {sub(/:/, ""); print $1}' /etc/userdomains 

Vous pouvez utiliser gsub dans awk pour supprimer tout : s dans la string.

 awk '/user/ {gsub(":", ""); print $1}' /etc/userdomains 

Vous pourriez utiliser tr au lieu de sed:

awk '/user/ {print $1 }' /etc/userdomains | tr -d ":"

Bien que je ne vois pas comment c'est mieux que juste d'utiliser awk (ni je vois ce qui ne va pas avec sed).