# grep e sed Due comandi sono particolarmente adatti per manipolare file e dati di testo usando le RE: `grep` e `sed`. ## grep Il comando `grep` permette di ricercare pattern nei file di testo, utilizzando le RE. Il carattere pipe `|` e' usato per reindirizzare l'output di un comando direttamente allo stin di grep. Alcune importanti opzioni: - `-c` o `--count`: invece di visualizzare i risultati di ricerca, visualizza solo il conteggio del numero di volte in cui si verifica una determinata corrispondenza - `-i`: nessuna distinzione tra maiuscole o minuscole - `-n`: mostra il numero di riga - `-v` o `--invert-match`: seleziona solo le righe che non corrispondono alla ricerca - `-H`: stampa anche il nome del file - `-1`: viene inclusa una riga prima e una riga dopo la corrispondenza trovata. Queste righe aggiuntive sono chiamate *righe di contesto*. - `-E` o `--extended-regexp`: equivalente al comando `egprep`, permette di utilizzare le funzionalita' delle RE estese. ## sed Permette di modificare i dati basati su testo in modo non interattivo. La sua sintassi di base: - `sed -f SCRIPT`, quando le istruzioni sono memorizzate in un file SCRIPT - `sed -e COMMANDS` ### Esempi pratici Partendo dal comando: ```bash > factor `seq 12` 1: 2: 2 3: 3 4: 2 2 5: 5 6: 2 3 7: 7 8: 2 2 2 9: 3 3 10: 2 5 11: 11 12: 2 2 3 ``` - Per **eliminare** la prima riga: ```bash > factor `seq 12` | sed 1d 2: 2 3: 3 4: 2 2 5: 5 6: 2 3 7: 7 8: 2 2 2 9: 3 3 10: 2 5 11: 11 12: 2 2 3 ``` - Per **eliminare** un *intervallo* di righe ```bash > factor `seq 12` | sed 1,7d 8: 2 2 2 9: 3 3 10: 2 5 11: 11 12: 2 2 3 ``` - E' possibile utilizzare piu' di un istruzione nella stessa esecuzione, separata da un `;`: ```bash > factor `seq 12` | sed '1,7d;12d' 8: 2 2 2 9: 3 3 10: 2 5 11: 11 ``` - Qualsiasi cosa inserita tra front-slash (`/`) e' considerata una RE. Invece di eliminare una riga, sed puo' sostituirla con un testo dato: ```bash > factor `seq 12` | sed '/:.*2/c REMOVED' 1: REMOVED 3: 3 REMOVED 5: 5 REMOVED 7: 7 REMOVED 9: 3 3 REMOVED 11: 11 REMOVED ``` - L'istruzione piu' usata: `s/FIND/REPLACE`. Solo la prima occorrenza verra' sostituita, a meno che non il flag `g` non sia posto al termina dell'istruzione: `s/FIND/REPLACE/g`