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