web-dev-qa-db-fra.com

Imprimer uniquement le mot correspondant, pas la ligne entière via grep

Je connais la programmation Shell en bash, mais pour une raison quelconque egrep -o pour imprimer uniquement les mots correspondants ne fonctionne pas et affiche l'erreur comme ci-dessous.

L'environnement est la console ksh unix sur PuTTY et non le terminal Linux ou Ubuntu ...... tout conseil est apprécié!

Entrée et sortie du terminal:

AB12 $ echo "i am a boy" | grep -w "am"
i am a boy
AB12 $ echo "i am a boy" | egrep -o "am"
egrep: illegal option -- o
usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...
AB12 $ echo$
ksh: echo$: not found
AB12 $ echo $Shell
/bin/ksh
AB12 $ echo "i am a boy" | grep -o "am"
grep: illegal option -- o
Usage: grep -hblcnsviw pattern file . . .
AB12 $

PS: Sujet similaire mais déjà essayé: grep peut-il afficher uniquement les mots qui correspondent au modèle de recherche?

17
NoobEditor

Je suppose que c'est une boîte Solaris à laquelle vous vous connectez. La version Solaris de grep n'a pas le -o option. Vous pouvez donc soit

  • installez le GNU grep sur votre boîtier Solaris (il est peut-être déjà installé dans /usr/sfw/bin, ou vous pourriez avoir de la chance avec pkg install //solaris/text/gnu-grep); ou
  • utilisez awk à la place (voir this SO question )

Voir sur ma boite:

$ uname
SunOS
$  echo "i am a boy" | grep -o "am"
grep: illegal option -- o
Usage: grep -hblcnsviw pattern file . . .
$  echo "i am a boy" | /usr/sfw/bin/ggrep -o "am"
am
12
damienfrancois

Si vous avez Perl:

echo "I am a boy" | Perl -lne '/am/ && print $&'
am
5
Tiago Lopo