GNU/Linux >> Linux Esercitazione >  >> Linux

Come inserisco il testo nella prima riga di un file usando sed?

Supponi di avere un file come questo:

one
two

Quindi aggiungere alla prima riga:

$ sed '1 s_$_/etc/example/live/example.com/fullchain.pem;_' file
one/etc/example/live/example.com/fullchain.pem;
two

Per inserire prima della prima riga:

$ sed '1 i /etc/example/live/example.com/fullchain.pem;' file
/etc/example/live/example.com/fullchain.pem;
one
two

Oppure, per aggiungere dopo la prima riga:

$ sed '1 a /etc/example/live/example.com/fullchain.pem;' file
one
/etc/example/live/example.com/fullchain.pem;
two

Nota il numero 1 in quei sed espressioni - si chiama l'indirizzo in sed terminologia. Ti dice su quale linea il comando che segue è di operare.

Se il tuo file non contiene la riga che stai indirizzando, il sed il comando non verrà eseguito. Ecco perché non puoi inserire/aggiungere alla riga 1, se il tuo file è vuoto.

Invece di utilizzare l'editor di streaming , per aggiungere (a file vuoti), basta usare un reindirizzamento della shell >> :

echo "content" >> file

Il tuo problema deriva dal fatto che sed non è in grado di individuare la riga in cui gli stai dicendo di scrivere, ad esempio:

touch test
sed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test

tenta di scrivere per inserire alla riga 1 di test , ma quella linea non esiste a questo punto. Se hai creato il tuo file come:

echo -en "\n" > test
sed -i '1i/etc/example/live/example.com/fullchain.pem;\' test

non si lamenterebbe, ma avresti una linea in più. Allo stesso modo, quando chiami:

sed -i "2i ssl_certificate_key /etc/example/live/example.com/privkey.pem;"

stai dicendo sed per inserire i seguenti dati alla riga 2 che non esiste in quel punto quindi sed non riesce a modificare il file.

Quindi, per la riga iniziale o l'ultima riga del file, non dovresti usare sed perché semplice > e >> i reindirizzamenti dello stream sono più che sufficienti.


Il tuo comando funzionerà se ti assicuri che il file di input abbia almeno una riga:

[ "$(wc -l < test)" -gt 0 ] || printf '\n' >> test
sed -i -e '1 i/etc/example/live/example.com/fullchain.pem;\' test

Linux
  1. Come estrarre il file tar.gz in Linux utilizzando la riga di comando

  2. Manipolazione del testo da riga di comando con sed

  3. Come inserire del testo all'inizio di ogni riga in Vim

  4. Come leggere la penultima riga in un file usando Bash?

  5. Come leggere l'ultima riga di un file di testo in una variabile usando Bash?

Come scaricare un file su Ubuntu usando la riga di comando

Come scaricare un file su Ubuntu Linux usando la riga di comando

Come aggiungere testo all'inizio del file in Linux

Come rimuovere le righe da un file usando il comando Sed

Come eliminare le prime N righe di un file Ascii utilizzando i comandi della shell?

Come eliminare il testo selezionato nell'editor vi