GNU/Linux >> Znalost Linux >  >> Linux

Sed Odebrat znaky z nového řádku?

Po nějakém zpracování mám svůj vstupní soubor jako níže.

soubor1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

Potřebuji zpracovat výše uvedený soubor dále, a tak potřebuji také oddělovač řádku na konci řádku. V současné době to mohu provést, jak je uvedeno níže.

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

Výsledkem výše uvedeného příkazu je výstup jako,

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

Jak vidíme, | se také připojuje k prázdným řádkům. Když jsem se pokusil odstranit | znak znovu z prázdných řádků pomocí níže uvedeného příkazu,

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

| postava se maže všude. Jak mohu smazat pouze | v prázdných řádcích? Potřebuji také ponechat prázdný řádek.

Přijatá odpověď:

Z originálu můžete přidat | na řádky, které nejsou prázdné:

Pomocí sed :

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

Pomocí perl :

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

Pokud chcete odstranit | z řádků, které jsou prázdné (ve druhé verzi):

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

Linux
  1. Může Sed nahradit nové řádkové znaky?

  2. Efektivně odstranit prvních pár řádků z textového souboru?

  3. Jak odstranit jeden řádek z historie?

  1. Jak otevřít novou kartu v terminálu GNOME z příkazového řádku?

  2. Jak použít sed k odstranění pouze dvojitých prázdných řádků?

  3. Odstraňte všechny speciální znaky a velká a malá písmena z řetězce v bash

  1. Odeberte balíčky Android SDK z příkazového řádku

  2. Odstraňte určitý řádek ze souboru historie Bash

  3. Clonezilla z příkazového řádku