Su un Mac, BSD sed
richiede il suffisso per il backup (ma il suffisso può essere una stringa vuota, ''
) - non è facoltativa in quanto è con GNU sed
. Quindi, il tuo comando viene interpretato come "backup del file con il suffisso 2d
e ... oops, lo script che hai dato è file.csv
, ma f
non è un comando sed
".
sed -i .bak -e 2d file.csv
Elimina la prima riga di dati dal file CSV (lasciando la riga di intestazione in posizione).
Se si vuole scrivere il codice in modo che funziona sia con BSD e GNU sed
, allora dovete collegare il suffisso all'opzione -i
(GNU sed
richiede il suffisso allegata all'opzione -i
; è così che identifica se c'è un suffisso opzionale o meno):
sed -i.bak -e 2d file.csv
si noti che non è possibile utilizzare un suffisso vuoto e hanno il compito di comando sia con BSD sed
e GNU sed
.
Il numero -e
non è necessario in nessuna riga di comando, ma lo uso abbastanza spesso. Cito spesso anche il comando tra virgolette singole, sebbene qui non sia necessario.
Se si desidera eliminare le prime due righe di dati, utilizzare 2,3d
come comando. Se si desidera eliminare le prime due righe, utilizzare 1,2d
.
Se non si desidera il backup, allora si può rimuovere dopo il completamento del comando sed
(più facile) oppure utilizzare il due stadi o tre fase di ballo:
sed 2d file.csv > file.csv.bak &&
mv file.csv.bak file.csv # Oops; there went the links
sed 2d file.csv > file.csv.bak &&
cp file.csv.bak file.csv
rm -f file.csv.bak
Con questi, potrebbe essere necessario aggiungere i comandi trap
per pulire il file intermedio .bak
se un interrupt o un altro segnale termina lo script.
Per citare la documentazione Apple per sed
- che è stato originariamente citato da Diego in un answer quale ha scelto di eliminare, l'opzione -i
prende un argomento che indica l'estensione da utilizzare per le copie di backup.
-i
extension
Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.
Questo elimina l'elemento nella seconda riga, ma non la prima riga: "sed 2d file.csv> file.csv.bak && cp file.csv.bak file.csv rm -f file.csv.bak" – NumenorForLife
Ho spiegato come eliminare le prime due righe nel file e come eliminare le prime due righe di dati nel file. Che cosa vuoi di più? –