Nástroje pro práci s textem



Utility pro hledánív textu, změny a úpravy textu.

OBSAH


Grep
Cat
Cut
Sort
Comm
Split
Csplit
Expand
Unexpand
Nl
Head
Tail
Tr
Uniq
Wc
More
Join
Touch
Column
Colrm
Rev
Less
Cmp
Sed
Vi
Edit
Awk
Jot

Grep



Vypisuje a počítá řádky (ne)obsahující nějaký řetězec
-c vypíše počet řádků ve kterých byl nalezen vzor
-c -v vypíše počet řádků ve kterých nebyl nalezen vzor
-l zobrazuje pouze jména souborů, ve kterých byl nalezen vzor
-n zobrazí čísla řádků obsahujících vzor
-s je potlačen standardní výstup, grep vrací pouze návratovou hodnotu (používá se při psaní příkazových procedur)
-v vypíše řádky neobsahující vzor
-i ignoruje rozdíly mezi malými a velkými písmeny
-w Vyber jen řádky ve kterých se shoduje celé samostatné slovo
-Ačíslo vypíše počet řádků před a řádku kde nalezl výraz
-Bčíslo vypíše řádku kde nalezl výraz a počet řádků za
-Ačíslo -Bčíslo vypíše počet řádků před,řádku kde jsi nalezl výraz a počet řádků za
-Cčíslo vypíše počet řádků před,řádku kde jsi nalezl výraz a STEJNÝ počet řádků za. stejné jako grep -A3 -B3
--collour zvýrazní hledaný výraz jinou barvou



Příklady

počet řádků ve kterých NEbyl nalezen vzor
grep -c zone named.conf
výsledek
93

v aktuálním adresáři zobrazuje jména souborů, ve kterých byl nalezen vzor
grep -l zone *
výsledek
named.conf
named.root

zobrazí čísla řádků obsahujících vzor a názvy
grep -n named named.conf
výsledek
3: directory "/etc/namedb";
4: pid-file "/var/run/named/pid";

vypíše 1 řádku před,řádku kde nalezl výraz "rum" a 3 řádky za
grep -A1 -B3 rum text.txt

vypíše pouze řádky , které obsahují slovo "rum" ,nevypíše řádky, které obsahují třeba "barum"
grep -w rum

v řádcích které obsahují slovo "rum" toto slovo zvýrazní
grep --colour rum
výsledek
vezmi si lopatu,krumpáč, sekeru a láhev rumu

Cat



vypisuje soubory na obrazovku. Nechá se použít i na spojování
-b čísluje neprázdné řádky
-n čísluje všechny řádky
-s pokud je více prázdných řádků za sebou, tak je zredukuje na jeden



Příklady

vypíše soubor named.conf
cat -n named.conf

spojí soubory jedna.txt a dva.txt do souboru tri.txt
cat jedna.txt dva.txt > tri.txt


Cut



vysekává z řádků určené sloupce
-c vysekává jednotlivé znaky
-d specifikuje oddelovac, podle kterého se urcují „pole" k vyseknutí (používá se spolu s -f)
-fpocet urcuje, kolikáté „pole" se vysekne
-s nevypisuj řádky neobsahující oddělovač(nějak mi nefunguje:-(()


Příklady

vysekne 1 až 10 znak z každého řádku souboru text.txt
cut -c1-10 text.txt

vysekne 1 až 5 pole , kde oddělovač je mezera, ze souboru text.txt
cut -d´ ´ -f1-5 text.txt

vysekni 1 sloupec, nevypisuj řádky které neobsahují oddělovač, kterým je mezera
cut -f 1 -s -d' ' named.conf

Sort



program pro třídění výstupů
-t oddělovač polí
-kpočet podle kolikátého pole bude výstup seřazen
-r obrácené(reverzní) řazení
-b ignoruj úvodní prázdné znaky (mez.+TAB)
-n řadí dle obecné numer. hodnoty
-u odstraní duplicity
-f nebudou se rozlišovat malá a velká písmena


Příklady

seřadí podle 5 sloupce v obráceném pořadí, oddělovač je mezera
sort -t' ' -k5 -r text.txt

Comm



porovnává řádky mezi dvěma soubory. Zobrazí 2 sloupce, případně 3 sloupce pokud se použije bez parametru
-1 v prvním sloupci zobrazí rozdíly nacházející se v druhém souboru, druhý sloupec zobrazuje společné řádky
-2 v prvním sloupci zobrazí rozdíly nacházející se v prvním souboru, druhý sloupec zobrazuje společné řádky
-3 v prvním sloupci zobrazí rozdíly nacházející se v prvním souboru, druhý sloupec zobrazuje rozdíly nacházející se v druhém souboru
-i stejné jako bez parametru-v prvním sloupci zobrazí rozdíly nacházející se v prvním souboru, druhý sloupec zobrazuje rozdíly nacházející se v druhém souboru třetí sloupec zobrazuje společné řádky


Příklady

comm text1.txt text2.txt

comm -1 text1.txt text2.txt

vytiskne pouze druhý sloupec
comm -13 text1.txt text2.txt


Split


rozřeže soubor na menší po určeném počtu řádků
formát příkazu
split číslo soubor název
číslo určuje, kolik řádků má mít každá část (poslední část může mít řádků méně), implicitně 1000 řádků,
soubor jméno souboru, který má být rozdělen
název část názvu vygenerovaných souborů - ke každé části je k názvu souboru přidáno aa,ab,ac ...


Příklady

rozřeže soubor text.txt na menší po 10 řádcích a pridá k názvu "mensi"
split -10 text.txt mensi


Csplit



rozřeže soubor na menší po určeném počtu řádků, případně podle obsahu
-k nemaže soubory při chybách
-f použije zadanou předponu místo standartní xx
-s nevypisuje velikosti jednotlivých souborů


Příklady

první soubor bude obsahovat 1 řádek, druhý soubor bude obsahovat 4 řádky, třetí bude obsahovat 9 řádků a poslední bude obsahovat řádek 10 až konec
csplit text.txt 2 5 10

ignoruje chyby, před název souborů vloží "bla",rozřeže soubor na 5 dílů(4+1), po 10 řádkách
csplit -k -f bla text.txt 5 "{4}"

rozdělí soubor na 5 dílů(4+1) po řádkách. V prvním souboru bude vše až PO PRVNÍ výskyt slova "pokus", další soubory budou začínat řádkem ve kterém se vyskytuje slovo "pokus".V posledním souboru může být výkytů více.
csplit -k text.txt /pokus/ "{4}"

rozdělí na 4 soubory. V prvním budou všechny řádky po slovo "pokus", ve druhém řádky od slova "pokus" po slovo "hokus", ve třetím řádky od slova "hokus" po slovo "fokus" a ve čtvrtém od slova "fokus" do konce. POZOR - bere to vždy jen první nalezený výraz, tj pokud se bude slovo "pokus" vyskytovat i za slovem "fokus" bude ve čtvrtém souboru. Pokud je slovo "pokus" v dokumentu na začátku, bude první soubor prázdný.
csplit -k text.txt /pokus/ /hokus/ /fokus/

Expand



převádí tabelátory na mezery
-i konvertuje pouze tabelátory před prvním znakem na řádku
-t počet mezer které se vloží místo tabelátoru


Příklady

každý tabelátor nahradí 100 mezerami
expand -t 100 text.txt


Unexpand



převádí mezery na tabelátory
-i konvertuje pouze mezery před prvním znakem na řádku
-t počet tabelátorů které se nahradí místo 1 mezerou


Příklady

každých 100 mezer nahradí jedním tabelátorem
unexpand -t 100 text.txt


Nl



čísluje řádky

Příklady
nl text.txt

Head



zobrazí začátek souboru(vstupu)
-c vypíše prvních x bajtů (pouze číslo= bajty, 1K=kB, 1M=MB)
-n vypíše prvních x řádek


vypíše prvních 15 řádků
head -n 15 text.txt


Tail


zobrazí konec souboru(vstupu), defaultně 10 řádek
-f vypisuje řádky , tak jak postupně přibívají. Výhodné při ladění, jej spustit nad logem
-n vypíše posledních x řádek
-r výpis bude řazen pozpátku, tj nejdříve poslední řádek


Příklady

vypíše vše od 30řádku do konce
tail +30

vypíše posledních 30řádků souboru
tail -n 30

vypíše soubor a pokud přibívají zápisy ,tak je zobrazuje
tail –f /var/log/maillog


Tr



maže a nahrazuje znaky. Upozornění-program tr nahrazuje jen stejný počet znaků, pokud bude nahrazovaný text delší než je počet znaků je počet znaků vkládaných, dělá to psí kusy-viz příklady. V tom případě raději použijte program sed
-d znaky specifikované v prvním řetězci se vymažou,
-c první řetězec označuje znaky, které se nemají nahrazovat,
-s pokud je více stejných nových znaků za sebou, vypíše se pouze jeden,


Příklady

vymaže všechny slova "rum" ze souboru text.txt a výsledek uloží do souboru text2.txt
tr -d 'rum' < text.txt > text2.txt

nahradí malá písmena v souboru text.txt velkými
tr '[:lower:]' '[:upper:]' < text.txt

POZOR-vysledek bude rummm, tj 4 a 5 znak se nahradi poslednim znakem slova rum
tr "pokus" "rum" < txt


Uniq



Vyjme duplicitní řádky ze souboru(vstupu)
-c v prvním sloupci bude počet výskytů
-d vypíše jen vícenásobné řádky
-i ignoruje při porovnání malá/velká písmena
-f vynechá porovnávání prvních x polí
-s vynechá porovnávání prvních x znaků


Příklady

vypíše všechny řádky, duplicitní vypíše jen jednou a před všema je počet výskytů
uniq -c text.txt

vypíše jen vícenásobné řádky
uniq -d text.txt


Wc



spočítá slova či znaky v souboru (vstupu)
-m vypíše počet znaků
-l vypíše počet řádek
-w vypíše počet slov
-c vypíše velikost v bytech


Příklady

počet znaků
wc -m text.txt

počet slov
wc -l text.txt


More



prohlížení souborů (výstupů) s možností listování. Používá se pokud se výstup nevejde najednou na obrazovku.
bnávrat o stránku zpět
/hledání v textu
nzopakuje poslední zadaný příkaz
=vypíše čísla řádku které vidíte na obrazovce
page up o stránku výše
page down o stránku níže
qkonec



Join



spojuje dohromady soubory podle zadaného sloupce, který musí být v obou souborech stejný, výstupem je seznam polí oddělených čárkami nebo mezerami, příp. zapsaný do více parametrů tvar pole: n.f resp. 0 implicitně: první pole je klíč, výpis všech polí po řadě, oddělovačem je posloupnost bílých znaků
t 'znak' oddělovač polí
{1|2} f číslo klíčového pole v souboru 1 resp. 2
a n ze souboru n se berou i nespárované řádky
v n ze souboru n se berou jen nespárované řádky
e str náhrada za chybějící pole
o list přesný tvar výstupu


příklad

spojí dva soubory, oddělovačam je čárka
join -t ',' soubor1 soubor2

soubor1

1,buřt
2,klobása
3,kafe

soubor2

1,100 korun
2,35 korun
3,15 korun

výsledek

1,buřt,100 korun
2,klobása,35 korun
3,kafe,15 korun

Touch



mění datum poslední modifikace souboru a pokud soubor neexistuje, je vytvořen nový s nulovou délkou

Příklad


použít tento čas
touch -t MMDDhhmm[[SS]RR][.ss]

vytvoř soubor text.txt
touch text.txt


Column



formátuje text do úhledných sloupců

Příklad
column –t text.txt


Colrm



vystřihává určený počet znaků ze vstupu

Příklady

vystřihne prvních 20 znaků z každé řádky
arp -a | colrm 20


Rev



vypíše řádky pozpátku, tj poslední znak na řádce dá na začátek a obráceně

Příklady

rev text.txt


Less



vstup opisuje na výstup po stránkách, lepší a novější varianta příkazu more
mezera posun o stránku vpřed
b posun o stránku zpět
q konec programu
:n skočí na následující soubor uvedený na příkazové řádce
/řetězec hledat řetězec směrem dopředu
?řetězec hledat řetězec směrem dozadu
n hledat další výskyt řetězce (v původním směru hledání)
N hledat další výskyt řetězce v opačném směru, než bylo zadáno původní hledání
F čeká a zobrazuje přírustky v souboru - obdoba příkazu tail -f soubor



Cmp


porovnává dva soubory po jednotlivých bajtech, ohlásí první rozdílný bajt
-spotlačení výstupu o nalezených odchylkách



Sed


dávkový editor textu. Prakticky to znamená, že dokáže v již existujícím textu (at již v souboru, nebo v jakémkoliv vstupu) dávkově nahrazovat, vystřihávat, vkládat nebo vyhledávat řetězce znaků.Sed postupně načítá ze vstupního proudu dat jednotlivé řádky. Vyhoví-li řádek adrese, tak jej uloží do prostoru pro vzorky, který pak zpracovává podle nastavených příkazů. Adresou mohou být vzorky, nebo rozsah podle čísel řádku.Má takové možnosti, že je umí asi jen málokdo všechny použít a využít. Pokusím se udělat nějaký výcuc a ukázat co nejvíce příkladů.Sám v mnoha věcech tápu.


jsou 2 možnosti volání programu sed

sed [volby] 'prikaz' [soubor-y]
sed [volby] -f script [soubor-y]
Volby
-e příkaz následující argument je příkaz (použití při více příkazech)
-f říká, že následuje soubor, který obsahuje program (příkazy editoru)
-n potlačení standardního výstupu (neplatí na řádky s příkazem p a s s parametrem p)
-r ve scriptech použity rozšířené regulární výrazy
-s nebere soubory jako jeden spojitý dlouhý proud, ale jako oddělené


Syntaxe programu
[adresa1][,adresa2][!]'příkaz'[argumenty]

Adresa-říkáme programu, které části textu budeme upravovat
adresovat můžeme číslem řádku, nebo regulárním výrazem.

žádná adresa - všechny řádky
jedna adresa - všechny řádky vyhovující adrese
dvě adresy - všechny řádky vždy od výskytu adresy1 až do výskytu adresy2
adresa následovaná ! - všechny řádky nevyhovující zadané adrese

Příklady:
1 - jen 1. řádek
100,$ - všechny řádky mezi 100. a posledním (včetně)
/pes/ - všechny řádky ve kterých se vyskytuje slovo pes
/^pes/,/^los/! - všechny řádky mimo řádků mezi pes a los



Řídící struktury
! instrukce umistěné na tomto řádku budou aplikovány na všechny řádky kromě řadků vybraných adresou, ktera je čássti příkazu.
{} pokud je skupina instrukcí uzavřena do {}, pak jedna adresa (nebo dvojice adres) vybere řádek, na kterou se aplikuje celá skupina instrukcí.



Příkazy
editující příkazy, které modifikují text.

Základní editace
i\ vloží text před řádek pokud není uvedena adresa text se připojí za každý řádek(nemůže mít 2 adresy), připojovaný text musí končit \
a\ připojí text za řádek chování stejné jako předcházející
c\ vybrané řádky jsou změněny tak, že obsahují nový text
d smaže řádky
s (n,g,p,w) vyhledávání. "g" na konci způsobí nahrazení vyhledaných znaků druhým výrazem
y přeloží znaky



Informace o řádcích
= zobrazí číslo řádku
l zobrazí řídící znaky v ASCII
p zobrazí řádek



Vstupně/výstupní zpracování
n přeskočí aktuální řádek a přesune se na další
r načte obsah jiného souboru ze vstupu a připojí jej k vybranému řádku
w zapíše vstupní řádky do jiného souboru
q ukončí skript sed



Kopírování a vkládání
h kopíruje prostor pro vzorky do schránky (tu přepíše)
H kopíruje prostor pro vzorky do schránky (k té přidá)
g vyvolá obsah schránky, smaže prostor pro vzorky
G vyvolá obsah schránky, přidá k prostoru pro vzorky
x vymění obsah schránky a prostor pro vzorky



Příkazy pro větvení
b skočí na značku (ve skriptě označenou :značka), nebo na konec skriptu
t stejně jako příkaz b, ale skočí až po provedení substituce



Zpracování vícenásobného vstupu
N načte jiný vstupní soubor (vytvoří se vložený nový řádek)
D smaže až po vložený nový řádek
P tiskne až po vložený nový řádek



Příklady


MEZERY V SOUBORU:

za každý řádek přidá volný řádek
sed G

za každý řádek přidá volný řádek a navíc zajistí, že nikde nebudou dva volné řádky za sebou
sed '/^$/d;G'

za každý řádek přidá dva volné řádky
sed 'G;G'

odstraní každý druhý řádek
sed 'n;d'

vloží prázdný řádek před každý řádek, který obsahuje "potvora"
sed '/potvora/{x;p;x;}'

vloží prázdný řádek za každý řádek, který obsahuje "potvora"
sed '/potvora/G'

vloží prázdný řádek před i za každý řádek, který obsahuje "potvora"
sed '/potvora/{x;p;x;G;}'


ČÍSLOVÁNÍ:

očísluje všechny řádky v souboru (zarovnání vlevo). Použití tabulátorů (viz. poznámka o \t níže) zajistí odsazení.
sed = filename | sed 'N;s/\n/\t/'

očísluje řádky v souboru (čísla vlevo, zarovnání vpravo)
sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'

očísluje řádky v souboru jen pokud řádek není prázdný
sed '/./=' filename | sed '/./N; s/\n/ /'


spočte řádky (namísto "wc -l")
sed -n '$='


PŘEVODY TEXTU A NAHRAZOVÁNÍ:

# V UNIXu: převede DOSové nové řádky (CR/LF) na Unixový formát.

předpokladá že řádky konči CR/LF
sed 's/.$//'

v bash a v tcsh stiskni Ctrl-V, poté Ctrl-M
sed 's/^M$//'

pracuje s ssed, gsed 3.02.80 a vyšší
sed 's/\x0D$//'


V UNIXu: převede Unixové nové řádky (LF) na DOSový formát.
sed 's/$'"/`echo \\\r`/"

V DOSu: převede Unixové nové řádky (LF) na DOSový formát.
sed "s/$//" nebo sed -n p

V DOSu: převede DOSové konce řádek (CR/LF) na Unixový formát.Funguje pouze s editorem sed z UnxUtils, verze 4.0.7 a vyšší.
sed "s/\r//" infile >outfile

smaže prázdné místo (mezery, tabulátory) na začátku každé řádky,zarovná celý text vlevo
sed 's/^[ \t]*//'

smaže prázdné místo (mezery, tabulátory) na konci řádky
sed 's/[ \t]*$//'

smaže prázdné místo (mezery, tabulátory) ze začátku i z konce
sed 's/^[ \t]*//;s/[ \t]*$//'

vloží 5 mezer na začátek každé řádky
sed 's/^/ /'

zarovná celý text vpravo, na celkovou šířku 79 znaků ve sloupci- zarovná na 78 znaků + 1 mezera
sed -e :a -e 's/^.\{1,78\}$/ &/;ta'

vycentruje celý text do středu 79 znakového sloupce. První způsob počítá mezery na začátku a na konci jako normální znak, druhým jsou mezery na začátku odstraněny. prohodí (najde a nahradí) "foo" a "bar" na každé řádce
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' nebo
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'

nahradí jen první výskyt na řádce
sed 's/foo/bar/'

nahradí jen čtvrtý výskyt na řádce
sed 's/foo/bar/4'

nahradí všechny výskyty na řádce
sed 's/foo/bar/g'

nahradí předposlední výskyt
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'

nahradí poslední výskyt
sed 's/\(.*\)foo/\1bar/'

nahradí "foo" výrazem "bar" JEN na řádkách, které obsahují "baz"
sed '/baz/s/foo/bar/g'

nahradí "foo" vy$razem "bar" JEN na řádkách, které neobsahují "baz"
sed '/baz/!s/foo/bar/g'

nahradí "scarlet", nebo "ruby", nebo "puce" výrazem "red" -větsina sedů
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'

nahradí "scarlet", nebo "ruby", nebo "puce" výrazem "red" -pouze GNU sed
gsed 's/scarlet\|ruby\|puce/red/g'

bezpečné nahrazování,aby se nám při nahrazování 'rum' za tuzemak' nepoškodilo třeba takové "brumla"
sed -e 's/[[:<:]]rum[[:>:]]/tuzemak/g'

vypíše soubor od konce (namísto "tac")
sed '1!G;h;$!d' nebo sed -n '1!G;h;$p'

vypíše řádky od konce (namísto "rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

spojí každé dvě řádky (jako "paste")
sed '$!N;s/\n/ /'

pokud řádka končí zpětným lomítkem připojí následující řádku
sed -e :a -e '/\\$/N; s/\\\n//; ta'

pokud řádka začíná rovnítkem připojí ji k předchozí řádce a nahradí "=" mezerou
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

přidá čárky k číslům - změní "1234567" na "1,234,567"
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'

přidá mezery k čislům - změní "1234567" na "1 234 567"
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1 \2/;ta'

ostatní sedy přidá prázdnou řádku po každé páté řádce (po 5, 10, atd.)
sed 'n;n;n;n;G;'



VYPSÁNÍ URČITÝCH ŘÁDEK:

vypíše prvních 10 řádek v souboru (namísto "head -n 10")
sed 10q

vypíše první řádku souboru (namísto "head -n 1"
sed q

vypíše posledních 10 řádek v souboru (namísto "tail")
sed -e :a -e '$q;N;11,$D;ba'

vypíše poslední 2 řádky souboru (namísto "tail -n 2")
sed '$!N;$!D'

vypíše poslední řádku souboru (namísto "tail -n 1")
sed -n '/VZOR/h;$g;$p' '

vypíše pouze poslední řádku odpovídající vzoru
sed '$!d' nebo sed -n '$p'

vypíše předposlední řádku v souboru pro 1-řádkový soubor vypíše prázdnou řádku
sed -e '$!{h;d;}' -e x

vypíše předposlední řádku v souboru pro 1-řádkový soubor vypíše řádku
sed -e '1{$q;}' -e '$!{h;d;}' -e x

vypíše předposlední řádku v souboru pro 1-řádkový soubor nevypíše nic
sed -e '1{$d;}' -e '$!{h;d;}' -e x

vypíše pouze řádky, které obsahují "regexp" (namísto "grep")
sed -n '/regexp/p' nebo sed '/regexp/!d'

vypíše pouze řádky, které NEobsahují "regexp" (namísto "grep -v")
sed -n '/regexp/!p' nebo sed '/regexp/d'

vytiskne řádku před tou, která obsahuje "regexp"
sed -n '/regexp/{g;1!p;};h'

vytiskne řádku po té, co obsahuje "regexp"
sed -n '/regexp/{n;p;}'

vytiskne číslo řádky obsahující "regexp", řádku před ní, jí samotnou a řádku po ní (podobně "grep -A1 -B1")
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

grep pro AAA, BBB a CCC (v libovolném pořadí)
sed '/AAA/!d; /BBB/!d; /CCC/!d'

grep pro AAA, BBB a CCC (v tomto pořadí)
sed '/AAA.*BBB.*CCC/!d'

grep pro AAA, nebo BBB, nebo CCC (namísto "egrep")
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

vypíše odstavec obsahující AAA (odstavce jsou odděleny prázdnými řádkami)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

vypíše odstavec obsahující AAA, BBB a CCC (v libovolném pořadí)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

vypíše odstavec obsahující AAA, nebo BBB, nebo CCC
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

vypíše jen řádky s 65 znaky, nebo víc
sed -n '/^.\{65\}/p'

vypíše jen řádky s méně než 65 znaky
sed -n '/^.\{65\}/!p' nebo sed '/^.\{65\}/d'

vypíše soubor od "regexp" do konce
sed -n '/regexp/,$p'

vypíše část souboru dle čísla řádek (řádky 8-12, včetně)
sed -n '8,12p' nebo sed '8,12!d'

vypíše řádku číslo 52
sed -n '52p' nebo sed '52!d' nebo sed '52q;d'

počínaje 3-tí, vypíše každou sedmou řádku
sed -n '3,${p;n;n;n;n;n;n;}'

vypíše část souboru mezi dvěma výrazy (včetně)- pozor na VELKÁ a malá písmena
sed -n '/Iowa/,/Montana/p'



MAZÁNÍ VYBRANÝCH ŘÁDEK:


vypíše vše AŽ na oblast mezi "Iowa" a "Montana"
sed '/Iowa/,/Montana/d'

smaže duplicitní, po sobě jdoucí řádky ze souboru (namísto "uniq").První řádka v řade duplicitních zůstane, ostatní jsou smazány.
sed '$!N; /^\(.*\)\n\1$/!P; D'

smaže duplicitní řádky nejdoucí po sobě. Pozor na přetečení bufferu,jinak užijte GNU sed.
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

smaže všechny řádky výskytující se jednou (namísto "uniq -d")(soubor musí být seřazen)
sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

smaže prvních 10 řádek v souboru
sed '1,10d'

smaže poslední řádku
sed '$d'

smaže poslední dvě řádky
sed 'N;$!P;$!D;$d'

smaže posledních deset řádek
sed -e :a -e '$d;N;2,10ba' -e 'P;D' nebo
sed -n -e :a -e '1,10!{P;N;D;};N;ba'

smaže každou osmou řádku
sed 'n;n;n;n;n;n;n;d;'

smaže řádky obsahující "pattern"
sed '/pattern/d'

smaže všechny prázdné řádky ze souboru (jako "grep '.' ""
sed '/^$/d' nebo sed '/./!d'

smaže všechny po sobě jdoucí prázdné řádky až na první dvě
sed '/^$/N;/\n$/N;//D'

smaže prázdné řádky na začátku souboru
sed '/./,$!d'

smaže všechny prázdné řádky na konci souboru
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'

smaže poslední řádku všech odstavců
sed -n '/^$/{p;h;};/./{x;/./p;}'

výmaz řádek od řádky 17 do řádky na níž je řetězec 'foo'
sed 17,/foo/d



SPECIÁLNÍ POUŽITÍ:

přidá znak "> " na začátek každé řádky - citace zprávy
sed 's/^/> /'

smaže úvodní "> " ze začátku každé řádky - zrušení citace
sed 's/^> //'

odstraní většinu HTML tagů
sed -e :a -e 's/<[^>]*>//g;/zipup.bat

odstraní většinu HTML tagů
dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat


Vi


Spuštění
vi soubor.txt

Lze použít volby -r (recovery) a případně -R (Read-only).

Editor vi pracuje ve dvou základních režimech: v příkazovém režimu nebo v režimu vkládání. Do režimu vkládání se lze přepnout některým z vkládacích příkazů, zpět do příkazového režimu pomocí klávesy ESC.
Základní příkaz pro začátek editace je a nebo i, uložíme a opustíme editor příkazem ZZ.

Pohyby kursoru
h nebo šipka vlevo kursor vlevo
l nebo šipka vpravo kursor vpravo
k nebo šipka nahoru kursor nahoru
j nebo šipka dolů kursor dolů
Ctrl-f o stránku vpřed
Ctrl-b o stránku zpět
Ctrl-d o 1/2 stránku vpřed
Ctrl-u o 1/2 stránku zpět
0 na začátek řádky
| (svisla cara) na začátek řádky
^ na prvni znak řádky různý od mezery
_ (podtrzeni) totéž
$ na posledni znak řádky
w (word) na nejbližší začátek slova vpravo
e (end) na nejbližší konec slova vpravo
b (back) na nejbližší začátek slova vlevo
W (word) na nejbližší začátek dlouhého slova vpravo



Modifikace souboru
i začne vkládat znaky před pozici kursoru
a začne vkládat znaky za pozici kursoru
I začne vkládat znaky na začátek řádku
A začne vkládat znaky na konec řádku
U odejmi všechny změny učiněné v aktuální řádce(undo)
u zrušení právě provedené změny (undo)
o vložení nového řádku pod aktuální a začátek vkládání
O vložení nového řádku před aktuální
Enter vložení nového řádku
:r soubor vložíme na aktuální pozici obsah externího souboru
:10,13t20 (copy)vložení řádek 10-13 za řádku 20
:4,18m21 (move) řádky 4-18 přesunout za řádku 21
:s/old/new/ v aktualni řádce misto "old" dosadi "new"
:/old/s//new/ najde nejbližši následující vyskyt "old" a nahradí ho "new"
:/old/s/old/new/ najde nejbližši následující vyskyt "old" a nahradí ho "new"
:s/old/new/g v aktualni řádce všechny vyskyty "old" nahradí "new"
:1,$s/old/new/g v cele pracovní paměti vsechny vyskyty "old" nahradí "new"
r znak1 nahrazení jednoho znaku
R přepnutí do přepisovacího režimu
x smazání jednoho znaku napravo
X smazání jednoho znaku nalevo
dd smazání řádku (a vložení do bufferu)
dG smazání od aktuální řádku a zbytku souboru až do konce
dH smazání od aktuální řádku a zbytku souboru až do začátku
D smazání od aktuální pozice kurzoru až po konec řádku
p vložení textu z bufferu za pozici kursoru
P vložení textu z bufferu před pozici kurzoru
yy vložení aktuálního řádku do bufferu
10x vymaž 10krát znak napravo-číslo před příkazem udává, kolikrát se bude příkaz opakovat



Hledání textu
/vzor Enter hledání vpřed v celém souboru
?vzor Enter hledání vzad v celém souboru
/ Enter znovu hledání vzoru vpřed v celém souboru
? Enter znovu hledání vzoru vzad v celém souboru
n znovu hledání vzoru stejným směrem v celém souboru
N znovu hledání vzoru, ale opačným směrem v celém souboru
fc hledání vpřed v řádce, kurzor se zastaví na c
Fc hledání vzad v řádce, kurzor se zastaví na c
; znovu hledání vpřed v řádce
, znovu hledání vzad v řádce



Několik dalších příkazů
:q ukončení editoru
:w uložení aktuálního souboru
:wq nebo ZZ nebo :x ukončení a uložení
:wq soubor uložit jako
:q! ukončení bez uložení
:set number nastaví číslování řádků
:set nonumber vypne číslování řádků
:set list nastaví viditelné znaky-konec řádku jako $ , escape jako ^[ , tabelator jako ^I
:set nolist zruší výše uvedené
:f vypíše číslo řádky



Edit


editor který má uživatelsky příjemnější rozhraní než VI Zjednodušená nápověda je na horní straně obrazovky, takže ji nebudu popisovat, jen upozorním, že klávesy je třeba dávat s Ctrl.

edit text.txt
nebo jen ee text.txt


Jot


je nástroj který dokáže generovat rozsahy znaků. Výhodné pro scripty
Pozor- občas se chová trochu jinak, než by člověk očekával

-pčíslo přesnost na x desetinných míst
-b slovo zopakuje slovo x krát
-r vypíše náhodné čísla
-c vypíše ASCII znaky



vypíše 5x slovo "test"
jot -b test - 1 5 nebo jot -b test 5
výsledek
test
test
test
test
test

rozdelí 0-50 na 6 dilu(vcetne nuly)
jot 6 0 50
výsledek
0
10
20
30
40
50

rozdělí 10-50 na 5 dílů
jot 5 10 50
výsledek
10
20
30
40
50

vezme první a poslední výraz
jot 2 10 50
výsledek
10
50

vezme první, prostřední a poslední výraz
jot 3 10 50
výsledek
10
30
50

vypíše rozsah 1-5
jot - 1 5
výsledek
1
2
3
4
5

vypíše 5 náhodných čísel
jot -r 5
výsledek
65
11
35
79
44

vypíše ASCII znaky- zde začíná na znaku "a" a vypíše 26 následujících (abecedu)
jot -w %c 26 a
výsledek
a
b
..
y
z

vypíše slovo "text" a za něj vloží čísla 1-5
jot -w text - 1 5
výsledek
text1
text2
text3
text4
text5


vypíše 5 náhodných písmen z rozsahu a-z
jot -r -c 5 a z
výsledek
r
s
w
l
f