Travaillez uniquement avec des lignes comportant 4 mots dans SED

Comment travailler avec des lignes qui ne contiennent que 4 mots avec SED?

C’est ce que j’ai réussi à faire, mais ça ne marche pas:

sed -e '/[ ]*[^ ]+[ ]*[^ ]+[ ]*[^ ]+[ ]*[^ ]+[ ]*/!d' -e 'other commands...' fileName 

Cela devrait être portable:

 sed -n ' /^[[:blank:]]*\([[:alpha:]]\{1,\}[[:blank:]]\{1,\}\)\{3\}[[:alpha:]]\{1,\}[[:blank:]]*$/ { # capture the 1st word of every 4 word line and print it 3 times s/^[[:blank:]]*\([[:alpha:]]\{1,\}\).*/\1 \1 \1/ p } ' > temp-file 

AWK peut être l’outil le plus facile pour votre tâche. Il suffit de vérifier que le nombre de champs dans une ligne est égal à quatre en utilisant la variable intégrée awk NF .

 awk 'NF==4' filename 

serait un bon sharepoint départ. Si vous souhaitez écrire les modifications dans un fichier, vous pouvez utiliser l’option d’édition in-situ de GNU AWK comme ci-dessous.

 gawk -i inplace 'NF==4' filename