Cílem cvičení jsou textové transformace pomocí příkazu sed
.
sed
= Stream EDitor je řádkový programovatelný filtr-n
potlačí implicitní výpis výsledku;
nebo novým řádkem-f
)
~alias 20='printf "%03d\n" {1..20}'
~20 | sed ''
~20 | sed -n ''
~20 | sed -f /dev/null
~20 | sed -n -f /dev/null
~20 | sed '10p'
~20 | sed -n '10p'
~20 | sed -n '10p;15p'
~20 | sed -n '10p
15p'
~vim skript
#!/bin/sed -nf
10p
15p
~20 | sed -nf skript
~chmod +x skript
~20 | ./skript
~./skript /etc/passwd
n
- číslo řádky$
- poslední řádka/RE/
- řádka odpovídající regulárnímu výrazuod,do
- rozsah řádků (včetně)
~20 | sed 'p'
~20 | sed -n 'p'
~20 | sed -n '1p'
~N=10; 20 | sed -n "${N}p"
~20 | sed -n '$p'
~20 | sed -n '5p'
~20 | sed -n '/5/p'
~20 | sed -n '/0$/p'
~20 | sed -nr '/1+$/p'
~20 | sed -n '5,10p'
~20 | sed -n '/0$/,$p'
~20 | sed -n '/1$/,/3$/p'
~20 | sed -n '/7$/,/1$/p'
~20 | sed -n '/018/,/018/p'
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
p
- print (výpis řádky)d
- delete (smazání řádky)q
- quit (výpis řádky a ukončení skriptu)=
- line number (výpis čísla řádky)
~20 | sed ''
~20 | sed 'p'
~20 | sed -n 'p'
~20 | sed -n '7,13p;/[02468]$/p'
~20 | sed -n '7,13p;/[02468]$/p' | uniq -d
~20 | sed -n '7,13p' | sed -n '/[02468]$/p'
~20 | sed -n '/[02468]$/p'
~20 | grep '[02468]$'
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
~20 | sed 'd'
~20 | sed '10d'
~20 | sed '6,$d'
~20 | sed '1,/0$/d'
~20 | sed '/[02468]$/d'
~20 | grep -v '[02468]$'
~20 >soubor
~sed '10d' soubor; less soubor
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
~20 | sed 'q'
~20 | sed '10q'
~20 | sed '/0$/q'
~20 | sed 'Q'
~20 | sed '10Q'
~20 | sed '/0$/Q'
~20 | sed '='
~20 | sed -n '='
~20 | sed -n '$='
~20 | sed '/0$/='
001 002 003 004 005 006 007 008 009 010 011 ...
s
s/RE/náhrada/[příznaky]
n - nahraď n-tý výskyt RE
g - nahraď všechny výskyty RE
p - pokud se náhrada provedla, vypiš řádku
~20 | sed 's/010/deset/'
~20 | sed 's/$/./'
~20 | sed 's/0$/0 <--/'
~20 | sed 's/[05]$/& <--/'
~20 | sed 's/0/x/'
~20 | sed 's/0/x/1'
~20 | sed 's/0/x/2'
~20 | sed 's/0/x/g'
~20 | sed -n 's/2/x/p'
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
~20 | sed 's/\(.\)\(.\)\(.\)/\3\2\1/'
~20 | sed -r 's/(.)(.)(.)/\3\2\1/'
~20 | sed -r 's/(.)(.)(.)/\1.\2.\3/'
~20 | sed -r 's/.(.)./(\1)/'
~20 | sed 's/..[05]$/--> &/'
~20 | sed '/[05]$/ s///'
~20 | sed '/[05]$/ s//& --/'
~20 | sed -n '/[05]$/ s//& --/p'
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
{ ... }
~20 | sed -n '7,13p; /[02468]$/p'
~20 | sed -n '7,13 { /[02468]$/p; }'
~20 | sed -n '/[05]$/ {
s/^/--> /
s/$/ <--/
p
}'
~20 | sed -n '/[05]$/ { s/^/--> /; s/$/ <--/; p; }'
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020