Okomentoval jsem sed
příkaz, kterému nerozumíte:
sed '
## In first line: append second line with a newline character between them.
1N;
## Do the same with third line.
N;
## When found three consecutive blank lines, delete them.
## Here there are two newlines but you have to count one more deleted with last "D" command.
/^\n\n$/d;
## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
## a line from the other side.
P;
D
'
Odebrat 1N
protože potřebujeme pouze dva řádky v 'zásobníku' a stačí s druhým N
a změňte /^\n\n$/d;
až /^\n$/d;
vymažete všechny dva po sobě jdoucí prázdné řádky.
Test:
Obsah infile
:
1
2
3
4
5
6
7
Spusťte sed
příkaz:
sed '
N;
/^\n$/d;
P;
D
' infile
To dává:
1
2
3
4
5
6
7
S awk
by to bylo jednodušší :
awk -v RS='\n\n\n' 1
S cat
by to bylo jednodušší :
cat -s
sed '/^$/{N;/^\n$/d;}'
Vymaže pouze dva po sobě jdoucí prázdné řádky v souboru. Tento výraz můžete použít pouze v souboru, pak tomu plně rozumíte pouze vy. Když přijde prázdný řádek, vstoupí do složených závorek.
Normálně sed přečte jeden řádek. N
přidá druhý řádek do prostoru vzoru. Pokud je tento řádek prázdný. oba řádky jsou odděleny novým řádkem.
/^\n$/
tento vzor bude v tu dobu odpovídat pouze d
bude pracovat. Jinak d
nefunguje. d
se používá k odstranění celého obsahu vzorového prostoru a poté ke spuštění dalšího cyklu.