102 lines
2.2 KiB
Markdown
102 lines
2.2 KiB
Markdown
# 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` |