1ère solution : Avec GNU awk
vous pouvez essayer le code suivant.
awk '
match($0,/:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/,arr){
print arr[1],arr[2]
}
' Input_file
2ème solution : Utilisation sed
's s
(opération de substitution) avec sa capacité de groupe de capture, essayez ce qui suit :
sed -E 's/^[^:]*:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/\1 \2/' Input_file
3ème solution : En utilisant n'importe quel awk
vous pouvez utiliser le code suivant. En utilisant son sub
y gsub
sur le premier et le dernier champ.
awk '{sub(/.*:/,"",$1);gsub(/^\[|\]$/,"",$NF);print $1,$NF}' Input_file
4ème solution : Avec la solution en une ligne de Perl qui utilise une correspondance paresseuse .*?
on peut essayer de suivre en utilisant son opération de substitution.
perl -pe 's/^.*?:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/\1 \2/' Input_file