Je veux find toutes les lignes qui ont le même mot au début et à la fin de la ligne.
Par exemple:
goodword fgdlakj 3t sfkl 43lk fkl goodword bad sfa;lk3t dgk;gs 34;kl bad334 singleword
Sortie souhaitée
goodword fgdlakj 3t sfkl 43lk fkl goodword singleword
Mon code est:
egrep "(^.+)([ ]+.*\1)$"
cela fonctionne si la ligne a plus de 1 mot. Mais je veux une ligne contenant un seul mot pour correspondre aussi.
Alors j'ai essayé:
egrep "(^.+)($|([ ]+.*\1)$)"
et ça ne marche plus – et je ne sais pas pourquoi.
Je propose d'utiliser awk
place:
awk '$1==$NF' file
L'avantage de cette solution est qu'elle est plus simple à lire et que vous pouvez facilement changer le séparateur de champs (avec l'option -F
), par exemple. même le même nombre d'espaces au début et à la fin de la ligne correspondra.
Il y a vraiment une belle réponse de jimmij mais si vous insistez sur grep :
grep -Ex '(\S+)(.*\1)?' file
Avec un grep
POSIX, un équivalent de awk '$1 == $NF'
serait:
grep -x '[[:blank:]]*\([^[:blank:]]\{1,\}\)\([[:blank:]]\(.*[[:blank:]]\)\{0,1\}\1\)\{0,1\}[[:blank:]]*'