Domanda

Sto scrivendo uno script di shell e ho bisogno di spogliare TROVARMI fuori qualcosa di simile:

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

e assegnazione a un array. Ho avuto il codice a lavorare senza problemi .. fino a quando mi sono trasferito lo script in Solaris a una zona non globale. Ecco il codice che ho usato prima:

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

Ora Stampa:

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

È stato suggerito che provo lo stesso comando con nawk, ma ricevo questo errore ora invece:

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

Inoltre, /usr/xpg4/bin/awk non esiste.

È stato utile?

Soluzione

Credo che avete bisogno di essere più chiaro su ciò che si vuole ottenere. Per me la linea awk non si 'striscia trovarmi fuori'

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

Quindi sarebbe d'aiuto se ti ha dato alcuni esempi di input / output che si aspettano. Forse c'è un modo per fare quello che vuoi con sed?

EDIT:

Dai commenti che realmente desidera selezionare "FIND ME" dalla linea, non a nudo fuori.

Credo che il dialetto di espressioni regolari accettati da questa nawk è diverso gawk. Così forse uno strumento che è più adatto per il lavoro è in ordine.

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

Altri suggerimenti

citare la variabile $line in questo modo: "$line". Se ancora non funziona, si può fare in un altro modo con nawk, dal momento che si desidera solo per trovare un esempio di FIND ME,

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

o se si utilizza bash / ksh su Solaris,

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top