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'