2013-08-15 3 views
5

Voglio ottenere una sottostringa da un file, ma solo da righe che non sono precedute da un punto esclamativo (che è il simbolo di commento in Fortran). Preferirei usare grep (ma non legato a). Per esempio:grep regex return sottostringa ma esclude commenti

infile.txt:

calib_ss/baseline.txt 
!calib_ss/base_sharpe.txt 

risultato desiderato:

baseline 

ho ottenuto fino a questo punto:

grep -Po "(?<=/)[^/.]*(?=\.)" infile.txt 

che restituisce

baseline 
base_sharpe 

Per escludere le righe che iniziano con! Ho pensato di combinare l'espressione con

^[^\!] 

ma non ci riesco. Grazie in anticipo!

+0

certo linguaggio? – hwnd

risposta

4

Questo grep dovrebbe funzionare:

grep -Po '^[^!].*?(?<=/)\K[^/.]*(?=\.)' infile.txt 

USCITA:

baseline 

Spiegazione:

  • ^[^!] farà in modo che corrisponda tutt'altro che ! presso l ine Iniziamo
  • \K farà in modo di ripristinare l'inizio