Il primo compito è quello di estrarre il tasso da quella linea. Con GNU grep (Linux non incorporato o Cygwin), puoi usare l' -o
opzione. La parte desiderata è quella contenente solo cifre e seguita da un %
segno. Se non vuoi estrarre lo %
stesso, hai bisogno di un trucco aggiuntivo: un'asserzione lookahead a larghezza zero , che non corrisponde a nulla ma solo se quel nulla è seguito da %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Un'altra possibilità è usare sed. Per estrarre una parte di una linea in sed, usa il s
comando, con una regex che corrisponde all'intera linea (che inizia con ^
e termina con $
), con la parte da conservare in un gruppo ( \(…\)
). Sostituisci l'intera riga con il contenuto dei gruppi da conservare. In generale, passa l' -n
opzione per disattivare la stampa predefinita e metti il p
modificatore per stampare le linee in cui c'è qualcosa da estrarre (qui c'è una sola linea quindi non importa). Consultate Restituire solo la parte di una linea dopo un modello di corrispondenza ed Estrarre una regex abbinata a 'sed' senza stampare i caratteri circostanti per ulteriori trucchi sed.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
Ancora più flessibile di sed, è stupido. Awk esegue le istruzioni per ogni riga in un linguaggio imperativo di piccole dimensioni. Ci sono molti modi per estrarre la tariffa qui; Seleziono i secondi campi (i campi sono delimitati da spazi bianchi per impostazione predefinita) e rimuovo tutti i caratteri che non sono una cifra.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
Il passaggio successivo, ora che hai estratto il tasso, è di passarlo come argomento a command2
. Lo strumento per questo è una sospensione del comando . Se si inserisce un comando all'interno $(…)
(parentesi in dollari), il suo output viene sostituito nella riga di comando. L'output del comando viene suddiviso in parole separate in ciascun blocco di spazi bianchi e ogni parola viene trattata come un modello jolly; a meno che non si vuole che questo accada, mettere le virgolette attorno alla sostituzione di comando: "$(…)"
. Con le doppie virgolette, l'output del comando viene utilizzato direttamente come singolo parametro (l'unica trasformazione è che le nuove righe alla fine dell'output vengono rimosse).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"