Question

J'écris un script shell et je dois enlever moi à trouver de quelque chose comme ceci:

* *[**FIND ME**](find me)*

et l'assigner à un tableau. J'ai eu le code de travail parfaitement .. jusqu'à ce que je me suis déplacé le script dans Solaris dans une zone non globale. Voici le code je avant:

objectArray[$i]=`echo $line | nawk -F '*[**|**]' '{print $2}'`

Prints:

awk: syntax error near line 1  
awk: bailing out near line 1

Il a été suggéré que j'essaie la même commande avec nawk, mais je reçois cette erreur maintenant à la place:

nawk: illegal primary in regular expression `* *[**|**]` at  `*[**|**]`
 input record number 1
 source line number 1

En outre, /usr/xpg4/bin/awk n'existe pas.

Était-ce utile?

La solution

Je pense que vous devez être plus clair sur ce que vous voulez obtenir. Pour moi, votre ligne awk ne 'bande FIND ME sur'

echo "* *[**FIND ME**](find me)*" | nawk -F '* *[**|**]' '{print $2}'
[

Alors il serait utile si vous avez donné quelques exemples de l'entrée / sortie que vous attendez. Peut-être il y a un moyen de faire ce que vous voulez avec sed?

EDIT:

D'après les commentaires que vous voulez vraiment sélectionner « Rechercher ME » de la ligne, la bande pas sur.

Je suppose que le dialecte des expressions régulières acceptées par cette nawk est différente de celle gawk. Alors peut-être un outil qui est mieux adapté au travail est en ordre.

echo "* *[**FIND ME**](find me)*" | sed -e"s/.*\* \*\[\*\*\(.[^*]*\)\*\*\].*/\1/"
FIND ME

Autres conseils

citer votre variable $line comme ceci: "$line". Si ne fonctionne toujours pas, vous pouvez le faire avec une autre façon nawk, puisque vous voulez seulement trouver une instance de ME TROUVER,

$ echo "$line" | nawk '{gsub(/.*\*\[\*\*|\*\*\].*/,"");print}'
FIND ME

ou si vous utilisez bash / ksh sur Solaris,

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top