Il modo più semplice nella shell Bourne per estrarre stringhe da una riga di testo?


1

Diciamo che sto facendo un grep e restituisce questa linea:

Invalid value (48) on line 3

Come posso facilmente ottenere quel valore 48 in una variabile nella shell Bourne?


Con i comandi "classici" Bourne Shell, o puoi usare strumenti esterni? No Bash o qualcosa di recente?
slhck

Risposte:


1

Se sei sicuro che il modello debba sempre ottenere il valore nella prima coppia di parentesi, tagliare è il tuo migliore amico.

myvar=$(echo 'Invalid value (48) on line 3' | cut -d\( -f2 | cut -d\) -f1)

questo estrae il valore tra i parenti.


$() non fa parte di SVID e quindi non è strettamente "Bourne Shell". È definito in POSIX però.
slhck

sì, se è davvero lo sh originale, anche se nella maggior parte delle distribuzioni Linux / bin / sh è solo un link simbolico a / bin / bash. tuttavia, il backstick dovrebbe funzionare, se $ () no. basta rimuovere $ e replace () con ``.
johnshen64

Sì, volevo solo menzionarlo per completezza dato che l'OP sembrava essere molto specifico sh e non Bash e compagni.
slhck

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.