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.
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