GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare/grep cosa c'è tra String1 e String2?

Sto cercando di estrarre un valore da una lunga stringa che potrebbe cambiare nel tempo. Quindi, ad esempio, la stringa potrebbe assomigliare a questa

....../filename-1.9.0.3.tar.gz"<....

E quello che voglio estrarre è il valore tra nomefile- e .tar.gz , essenzialmente la versione del file (1.9.0.3 in questo caso). Il motivo per cui devo farlo in questo modo è perché in seguito potrei eseguire il comando e il valore sarà 1.9.0.6 o 2.0.0.2 o qualcosa di completamente diverso.

Come posso fare questo? Attualmente sto usando solo grep, ma non mi dispiacerebbe usare altre utilità come sed o awk o cut o altro. Per essere perfettamente chiaro, devo estrarre solo la parte della versione del file della stringa, poiché è molto lunga (su entrambi i lati) tutto il resto deve essere ritagliato in qualche modo.

Risposta accettata:

Con grep -P /pcregrep , utilizzando un look-behind positivo e uno sguardo al futuro positivo:

grep -P -o '(?<=STRING1).*?(?=STRING2)' infile

nel tuo caso sostituisci STRING1 con filename- e STRING2 con .tar.gz

Se non hai accesso a pcregrep e/o se il tuo grep non supporta -P puoi farlo con il tuo strumento di elaborazione del testo preferito. Ecco un modo portatile con ed che ti dà lo stesso output:

ed -s infile <<IN
g/STRING1/s// 
&/g
v/STRING1.*STRING2/d
,s/STRING1//
,s/STRING2.*//
,p
IN

Come funziona:a ogni STRING1 viene anteposta una nuova riga occorrenza (quindi ora c'è al massimo un'occorrenza per riga), quindi tutte le righe che non corrispondono a STRING1.*STRING2 vengono cancellati; sui restanti conserviamo solo ciò che è compreso tra STRING1 e STRING2 e stampa il risultato.


Linux
  1. Che cos'è un Makefile e come funziona?

  2. Cosa sono i processi zombi e come trovare e uccidere i processi zombi?

  3. Qual è la differenza tra individuare e trovare il comando in Linux

  4. Qual è la differenza tra "trova" e "trova" in Linux?

  5. Che cos'è la posta e come viene navigata?

Come trovare la differenza tra due directory usando gli strumenti Diff e Meld

Come trovare una stringa o una parola specifica in file e directory

Che cos'è l'UID in Linux, come trovarlo e modificarlo

Come trovare una stringa in un file su Linux

Cos'è EasyApache e come si usa?

Che cos'è il comando Grep in Linux? Perché viene utilizzato e come funziona?