GNU/Linux >> Linux Esercitazione >  >> Linux

Sed rimuove i caratteri dalla nuova riga?

Dopo alcune elaborazioni, ho il mio file di input come di seguito.

file1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

Ho bisogno di elaborare ulteriormente il file sopra e quindi ho bisogno anche di un interruttore di linea alla fine della riga. Attualmente, posso realizzarlo come di seguito.

sed 's/$/|/' file1.txt

Il comando precedente risulta nell'output come,

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

Come possiamo vedere, il | viene aggiunto anche alle righe vuote. Quando ho provato a rimuovere il | carattere di nuovo dalle righe vuote usando il comando sotto,

sed 's/|//g' file1.txt

Il | il personaggio viene eliminato ovunque. Come posso eliminare solo il | in righe bianche? Devo anche mantenere la riga vuota.

Risposta accettata:

Dal tuo originale, puoi aggiungere | alle righe non vuote:

Usando sed :

sed -e '/^$/!s/$/|/' file

Usando perl :

perl -lpe 's/$/|/ if length' file

Se vuoi rimuovere | da righe vuote (nella seconda versione):

perl -lpe 's/|// if length == 1'

Linux
  1. Come rimuovere le righe vuote da un file (inclusi tabulazione e spazi)?

  2. Sed può sostituire i caratteri di nuova riga?

  3. Rimuovere in modo efficiente le prime due righe da un file di testo?

  4. Come aprire una nuova scheda in GNOME Terminal dalla riga di comando?

  5. Come usare sed per rimuovere solo le doppie righe vuote?

Rimuovi directory in Linux - Come eliminare una cartella dalla riga di comando

Come rimuovere le righe da un file usando il comando Sed

Come rimuovere (^M) caratteri da un file in Linux

Come rimuovere tutti i caratteri di spazio bianco da un file di testo

Clonezilla dalla riga di comando

Come rimuovere i caratteri non validi dai nomi dei file?