Dal OSX (BSD sed) presenta alcune differenze di sintassi a Linux (GNU) sed, ho pensato di aggiungere quanto segue da alcune note duramente conquistati miei:
OSX (BSD) SED trova/sostituisci all'interno del blocco (indirizzo) (inizio e modelli di punto finale (/../) o #s linea) in stesso file (via & via & via & sezione 4.20 here):
Sintassi:
$ sed '/start_pattern/,/end_pattern/ [operations]' [target filename]
trovare Standard/sostituire esempi:
$ sed -i '' '2,3 s/,\s\+/,/g' example.txt
$ sed -i '' '/DOCTYPE/,/body/ s/,\s\+/,/g' example.txt
Trova/Sostituisci esempio con operatore complessa e raggruppamento (non può funzionare senza raggruppamento sintassi a causa di streaming uso di standard input). Tutte le dichiarazioni in raggruppamento devono essere su righe separate, o separati w/punti e virgola:
Complesso Esempio Operator (cancellerà tutta la riga contenente un match):
$ sed -i '' '2,3 {/pattern/d;}' example.txt
multi-file di trovare + sed:
$ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}'
Spero che questo aiuti qualcuno!
Linea 2,5 ......? –
Questi numeri di linea specifici sono noti al momento in cui si richiama sed, o ci sono regioni nel file che dipendono dai dati stessi? Come la sed dovrebbe essere attiva solo tra alcuni marcatori di inizio e fine? In tal caso, userei 'awk', perché puoi mantenere variabili di stato tra le righe. –