Sed

From mmmv_kos
Revision as of 15:47, 25 April 2020 by Martinvahi (talk | contribs) (ABC)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Sed on nagu Linuxi konsoolitöövahend CAT, kuid niisama faili sisu konsoolile väljastamise asemel võib ta awk'i/gawk'i kombel tekti toimetada ning failipõhise sisendi asemel ka konsoolisisendit kasutada.


Juhendite loetelu


Juhendite lugemisel võib väga praktiliseks osutuda mõne reklaamiblokaatori, näiteks adblockplus.org, kasutamine.

Kasutusnäited

Siinsetes näidetes kasutatav toretekstifail.txt

Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg


cat ./toretekstifail.txt | sed ''      # on sama, mis cat ./toretekstifail.txt
cat ./toretekstifail.txt | sed -e ''   # on sama, mis cat ./toretekstifail.txt


Ridade dubleerimine

cat ./toretekstifail.txt | sed -e '2p'     # väljastab kogu fail, kus 2. rida on dubleeritud
cat ./toretekstifail.txt | sed -e '2,5p'   # väljastab kogu fail, kus read 2 kuni     5 ehk read 2,3,4,5, on dubleeritud
cat ./toretekstifail.txt | sed -e '2,+3p'  # väljastab kogu fail, kus read 2 kuni 2+3=5 ehk read 2,3,4,5, on dubleeritud
cat ./toretekstifail.txt | sed -e '1~2p'   # väljastab kogu fail, kus read alates 1. on üle ühe  dubleeritud ehk read 1,1,2,3,3,4,5,5,6,...
cat ./toretekstifail.txt | sed -e '4~3p'   # väljastab kogu fail, kus read alates 4. on üle kahe dubleeritud ehk read 1,2,3,4,4,5,6,7,7,8,9,10,10,....


Töö lõpetamine, väljumine

Nagu käsk "p", kuid täheks on "q".

cat ./toretekstifail.txt | sed -e '  q'     # väljastab ühe rea           ja lõpetab töö
cat ./toretekstifail.txt | sed -e '1 q'     # väljastab ühe rea           ja lõpetab töö
cat ./toretekstifail.txt | sed -e '2 q'     # väljastab kaks rida         ja lõpetab töö
cat ./toretekstifail.txt | sed -e '$ q'     # väljastab kogu sisendteksti ja lõpetab töö
cat ./toretekstifail.txt | sed -e '0 q'     # annab veateate              ja lõpetab töö veakoodiga 1


Töö lõpetamine kui jooksva sed-programmi versioon on vanem kui sed-skriptis nõutud

Tegu pidavat olema GNU Sed spetsiifilise funktsionaalsusega.

cat ./toretekstifail.txt | sed -e 'v 99999.99.9' # väljub veateeatega ja veakoodiga 1, sest jooksva Sed'i versioon on väiksem kui 99999.99.9

Ridade kustutamine

cat ./toretekstifail.txt | sed -e '2d'    # kustutab 2. rea
cat ./toretekstifail.txt | sed -e '2,5d'  # kustutab read 2 kuni 5 ehk alles jäävad read 1, 6, 7, ...
cat ./toretekstifail.txt | sed -e '1~3d'  # kustutab alates 1. reast üle 2 rea kõik read ehk alles jäävad read 2,3,5,6,8,9,11,12,....
cat ./toretekstifail.txt | sed -e '3~2d'  # kustutab alates 3. reast üle 1 rea kõik read ehk alles jäävad read 1,2,4,6,8,10,12,....


Sisendteksti reanumbri kirjutamine väljundtekstis kajastatavale reale eelnevale reale

sed -e    '='  ./toretekstifail.txt  # kõigi ridade korral
sed -e '  2='  ./toretekstifail.txt  # vaid sisendteksti 2. rea korral
sed -e '2,4='  ./toretekstifail.txt  # alates sisendteksti 2. reast kuni sisendteksti 4. reani ehk sisendteksti read 2,3,4
sed -e '5~2='  ./toretekstifail.txt  # kõik sisendteksti read üle kahe alates sisendteksti 5. reast ehk read 5,8,11,...


Tekstiasendus

ABC

cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/'    # teeb igal real maksimaalselt ühe asenduse
cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/g'   # teeb igal real nii palju asendusi, kui mitu otsisõne-fraasi leitakse

cat ./toretekstifail.txt | sed -e 's/AA/RR/2'              # teeb igal real vaid teise leitud otsisõne korral asenduse "AA" -> "RR", 
                                                           # kuid edasi liigutakse "AA"-pikkuse kaupa, s.t. sõnes "_AAA_" leitakse vaid üks "AA".

cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/i'   # teeb igal real maksimaalselt ühe asenduse, kuid otsisõne kasutatakse tõstutundetult
cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/ig'  # teeb igal real nii palju asendusi, kui mitu otsisõne-fraasi tõstutundetult leitakse
cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/gi'  # sama, mis 's/otsis8ne/uuss8ne/ig' argumendiga
cat ./toretekstifail.txt | sed -e 's/^otsis8nereaalguses/uuss8ne/'   # klassikalise regulaaravalduse kasutamise näide
cat ./toretekstifail.txt | sed -e 's/otsiregulaaravaldis/ZZZ&SSS/'   # teeb igal real täpselt ühe asenduse viisil, et regulaaravaldisega leitu ümbritsetalse sõnedega "ZZZ" ja "SSS"
cat ./toretekstifail.txt | sed -e 's/otsiregulaaravaldis/ZZZ&SSS/g'  # teeb igal real asendused viisil, et regulaaravaldisega leitu ümbritsetalse sõnedega "ZZZ" ja "SSS"

cat ./toretekstifail.txt | sed -e 's/^/ZZZ /g'          # lisab iga rea prefiksiks "ZZZ "
cat ./toretekstifail.txt | sed -e 's/g$/F/g'            # klassikaline regulaaravaldise realõputähistuse kasutamise demo


cat ./toretekstifail.txt | sed -e 's/[[:digit:]]_/&H/g' # Sed regulaaravaldise süntaksi "\d"     demo
cat ./toretekstifail.txt | sed -e 's/[[:alnum:]]/x/g'   # Sed regulaaravaldise süntaksi "[\w\d]" demo
cat ./toretekstifail.txt | sed -e 's/[[:alpha:]]/x/g'   # Sed regulaaravaldise süntaksi "[\w]"   demo
printf ' aa\tbb ' |        sed -e 's/[[:blank:]]/x/g'   # Sed regulaaravaldise süntaksi "[ \t]"  demo
printf ' aa\tbb ' |        sed -e 's/[[:space:]]/x/g'   # sama, mis Sed'i [[:space:]]
printf ' aa\tbb ' |        sed -e 's/b[[:space:]]/FF/g' # veel üks [[:space:]] demo
printf ' aa\tbb ' |        sed -e 's/b[[:space:]]/FF/g' # veel üks [[:space:]] demo
printf ' aa\tbb ' |        sed -e 's/[a[:space:]]/FF/g' # veel üks [[:space:]] demo

printf ' aA\tbB ' |        sed -e 's/[[:lower:]]/_/g'   # selekteerib vaid väiketähed
printf ' aA\tbB ' |        sed -e 's/[[:upper:]]/_/g'   # selekteerib vaid suurtähed


cat ./toretekstifail.txt | sed -e 's/[RdaiAg]/F/g'      # regulaaravaldises kasutatavate tähemärkide loendi demo
cat ./toretekstifail.txt | sed -e 's/[a-k]/F/g'         # regulaaravaldises kasutatavate tähemärkide vahemikupõhise loendi demo
cat ./toretekstifail.txt | sed -e 's/11\? /F/g'         # klassikaline EBNF'i       ?         kasutatakse Sed'is      kurakaldkriipsuga
cat ./toretekstifail.txt | sed -e 's/1\+/F/g'           # klassikaline EBNF'i       +         kasutatakse Sed'is      kurakaldkriipsuga
cat ./toretekstifail.txt | sed -e 's/11*/F/g'           # klassikaline EBNF'i       *         kasutatakse Sed'is ilma kurakaldkriipsuta
cat ./toretekstifail.txt | sed -e 's/1\{4\}/F/g'        # klassikaline EBNF'i {i_kordustearv} kasutatakse Sed'is      kurakaldkriipsudega
cat ./toretekstifail.txt | sed -e 's/1\{2,3\}/F/g'      # klassikaline EBNF'i {i_kordustearv} analoog vahemik-kujul, siinse näite korral kordusi 2 kuni 3 
cat ./toretekstifail.txt | sed -e 's/\(da\|A_g\)/___/g' # klassikalisi EBNF'i       () ja |   kasutatakse Sed'is      kurakaldkriipsudega

echo 'aa \ bb' | sed -e 's/\\/UU/g'  # tähemärkide prefiksmarkeerimine


echo "/aaa/bbb/ccc" | sed -e 's/\/aaa\/bbb/\/fff\/ggg/' # annab GNU Sed korral sama tulemuse, mis
echo "/aaa/bbb/ccc" | sed -e 's|/aaa/bbb|/fff/ggg|'     # annab GNU Sed korral sama tulemuse, mis
echo "/aaa/bbb/ccc" | sed -e 's@/aaa/bbb@/fff/ggg@'

Kõigis kataloogis olevates tekstifailides tehtav tekstiasendus

Väidetavalt(arhiivkoopia, archive_org_koopia) on üks lahendus selline, aga praktikas on siin midagi viga, see ei toimi.

find . -name '*.txt' -print0 | xargs --null sed --in-place -e 's/otsis8ne/uuss8ne/g'

Üksikute tähemärkide asendamine

Sisendfaili ei muudeta, muutused kajastuvad vaid väljundtekstis. Süntaks: y/tähemärkide_otsiloend/tähemärkide_asendusloend/. Tegu ei ole regulaaravaldisega ja tähemärkide otsiloend peab tähemärkide asendusloendiga sama pikk olema. Asendused tehakse viisil, et tähemärkide otsiloendis olev tähemärk asendatakse tema otsiloendi indeksiga samal indeksil oleva asendusloendi tähemärgiga.


# 1 -> X
# a -> H
sed -e 'y/1a/XH/' ./toretekstifail.txt

Käskude kombineerimine

cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/;2p'         # teeb maksimaalselt ühe asenduse igal real ja dubleerib 2. rea
cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/ ; 2p'       # on samaväärne eelmise Bash-i-reage
cat ./toretekstifail.txt | sed -e 's/otsis8ne/uuss8ne/' -e '2p'    # on samaväärne eelmise Bash-i-reage


Tsüklid

Tsüklid on Sed'is realiseeritud GOTO käsu stiilis, kasutades märgendeid ja Sed'i GOTO-käsu analoogi. GOTO-käsuks on väike b-täht ehk b.

sed -e '2p;
b m2rgendinimi ;
1d;
:m2rgendinimi ;
5p
' ./toretekstifail.txt

Tingimuslause

Regulaaravaldispõhine tingimuslause

sed -e '/gg gg/p' ./toretekstifail.txt  # dubleerib read, kus leidub sõne "gg gg"

Asenduspõhine tingimuslause

Väike t-täht ehk t hüppab märgendile siis kui sellele eelnev asendus-käsk suutis leida sõne, mida asendada.

sed -e 's/AAA/BB/g; t m2rgend; 1d; :m2rgend ' ./toretekstifail.txt

Suur T-täht ehk T hüppab märgendile siis kui sellele eelnev asendus-käsk ei suutnud leida sõne, mida asendada.

sed -e 's/AAA/BB/g; T m2rgend; 1d; :m2rgend ' ./toretekstifail.txt


Tekstiridade massiivid ehk "puhvrid"

Üldskeem on

<sisendtekst failist või stdin-voost> -->
    ar_read_1_sisendtekst -->
    ar_read_2_v2ljundtekst

ning käsk "d" kustutab read ära mõlemast massiivist korraga. Käsu "d" toimimise demo:

tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e ''
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '5 a lisarida a1' -e '5 d'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
lisarida a1
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '5 d ; 5 a lisarida a1'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$

Käskude "a" ja "i" ning "d" koostoimimise demo:

tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed -e '5 i lisarida i1' -e '5 i lisarida i2' -e ' 5 a lisarida a1' -e '5 a lisarida a2'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
lisarida i1
lisarida i2
Rida 5   1111_AAA_gggg gggg
lisarida a1
lisarida a2
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed -e '5 d; 5 i lisarida i1' -e '5 i lisarida i2' -e ' 5 a lisarida a1' -e '5 a lisarida a2'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed -e '5 i lisarida i1' -e '5 i lisarida i2' -e ' 5 a lisarida a1' -e '5 a lisarida a2' -e '5 d'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
lisarida i1
lisarida i2
lisarida a1
lisarida a2
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed -e ''
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '/ida 5/d' -e '5 i lisarida i1' -e '5 a lisarida a1'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg


Globaalne reamuutuja (arhive_org_koopia) s_globaalne_rida_1

Reamuutuja on nagu klassikaline globaalne muutuja, mille tüübiks on sõne-tüüp ja mis sisaldab täpselt ühte rida. Käskude "x" ja "g" Pascal'i süntaksi sarnane selgitus:

void func_käsk_x(int ix){
    s_t66tlusel_olev_rida := ar_read_1_sisendtekst[ix] // 0,1,2,.... 
    //-----swap---start-----------------------------------------------
    s_tmp := s_t66tlusel_olev_rida
    s_t66tlusel_olev_rida := s_globaalne_rida_1
    s_globaalne_rida_1 := s_tmp
    //-----swap---end-------------------------------------------------
    ar_read_1_sisendtekst[ix] := s_t66tlusel_olev_rida
}

void func_käsk_g(int ix){
    s_t66tlusel_olev_rida := ar_read_1_sisendtekst[ix] // 0,1,2,....

    s_t66tlusel_olev_rida := s_globaalne_rida_1

    ar_read_1_sisendtekst[ix] := s_t66tlusel_olev_rida
}

// s_t66tlusel_olev_rida on inglise keelses dokumentatsioonis "pattern space"
// s_globaalne_rida_1    on inglise keelses dokumentatsioonis "holding space"


Demo, kus rida 5 kirjutatakse üle reaga 2.

tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e ''
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '2 x ; 2 g; 5 g; '
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 2   1111_AAA_gggg AAA
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '2 x ; 2 g; 5 g; 5 s/Rida.2/muudetud_rida_2_rea_5_asemel/'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
muudetud_rida_2_rea_5_asemel   1111_AAA_gggg AAA
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$


Demo2:

tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e ''
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e '5 s/ida.5/_o___/;'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
R_o___   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e 'x ; g ; 5 s/ida.5/_o___/;'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
R_o___   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$ cat ./toretekstifail.txt | sed  -e 'x ; g ; 5 s/ida.5/_o___/; x ;'
Rida 1   1111_AAA_gggg
Rida 2   1111_AAA_gggg AAA
Rida 3   1111_AAA_gggg
Rida 4   1111_AAA_gggg AAA
Rida 5   1111_AAA_gggg gggg
Rida 6   1111_AAA_gggg
Rida 7   1111_AAA_gggg
Rida 8   1111_AAA_gggg
Rida 9   1111_AAA_gggg
Rida 10  1111_AAA_gggg
Rida 11  1111_AAA_gggg
Rida 12  1111_AAA_gggg
tsw1@DESKTOP-H12EA8D:~/tmp_/test$

Ridade vahemike valimine

Alates sisendtekti 5. reast, sisendteksti 5. rida kaasa arvatud, kuni sisendteksti viimase reani, väljastab väljundtesktis reale eelneval real reanumbri:

sed -e '5,$=' ./toretekstifail.txt

Alates sisendtekti reast, kust regulaaravaldis sõne leidis, regulaaravaldisega leitud sõnega rida kaasa arvatud, kuni sisendteksti viimase reani, väljastab väljundtesktis reale eelneval real reanumbri:

sed -e '/g g/,$=' ./toretekstifail.txt


Alates sisendtekti reast, kust regulaaravaldis sõne leidis, regulaaravaldisega leitud sõnega rida kaasa arvatud, +2 rida ehk kokku kolme sisendteksti rea korral, väljastab väljundtesktis reale eelneval real reanumbri:

sed -e '/g g/,+2=' ./toretekstifail.txt


Alates sisendtekti reast, kust regulaaravaldis sõne leidis, regulaaravaldisega leitud sõnega rida kaasa arvatud, kuni maksimaalselt sisendteksti 10. reani, erandiga, et alati on ka sisendteksti rida, kust reulaaravaldis sõne leidis, ja seda ka siis, kui leitud sõnega sisendteksti rida asub pärast sisendteksti 10. rida:

sed -e '/g g/,10=' ./toretekstifail.txt


Failide kirjutamine

Faili ülekirjutamine

Kirjutab faili ylekirjutatav.txt faili toretekstifail.txt read 3,4,5... kuni lõpuni.

sed -e '3,$ w ./ylekirjutatav.txt' ./toretekstifail.txt


Kirjutab faili ylekirjutatav.txt faili toretekstifail.txt read 3,4.

sed -e '3,4 w ./ylekirjutatav.txt' ./toretekstifail.txt


Kirjutab faili ylekirjutatav.txt faili toretekstifail.txt read 3,4,5 ehk rida 3. ja 2 rida veel. Kui sisendfailis, toretekstifail.txt, on vähem kui 3 rida, siis on väljundfaili, ylekirjutatav.txt, suurus on 0B.

sed -e '3,+2 w ./ylekirjutatav.txt' ./toretekstifail.txt


Ridade lisamine

Käskude a ja i korral sisendfaili ei muudeta, muutused kajastuvad vaid väljundtekstis.


Ridade lisamine selekteeritud rea järgi

Väljundtekstis on pärast sisendteksti 2. rida üks lisarida. Kui sisendtekstis on vähem kui 2 rida, siis on väljundtekst sama, mis sisendtekst.

sed -e '2 a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus kõigi nende sisendteksti ridade järel, kust regulaaravaldisega otsisõne leiti, on lisatud lisarida tekstiga "v2ljundteksti_lisatud_rea_tekst", siinse lause jutumärkideta.

sed -e '/g g/ a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus kõigi nende sisendteksti ridade järel, kust regulaaravaldisega otsisõne leiti, on lisatud lisarida tekstiga "v2ljundteksti_lisatud_rea_tekst", siinse lause jutumärkideta, ning 2 järgnevale reale on järel-rida lisatud sõltumata regulaaravaldise poolt kirjeldatud otsisõne leidumisest.

sed -e '/g g/,+2 a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus kõigi nende sisendteksti ridade järel, kust regulaaravaldisega otsisõne leiti, on lisatud lisarida tekstiga "v2ljundteksti_lisatud_rea_tekst", siinse lause jutumärkideta, ning kõigile järgnevatele ridadele kuni 9. reani on järel-rida lisatud sõltumata regulaaravaldise poolt kirjeldatud otsisõne leidumisest.

sed -e '/g g/,9 a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus kõigi nende sisendteksti ridade järel, kust regulaaravaldisega otsisõne leiti, on lisatud lisarida tekstiga "v2ljundteksti_lisatud_rea_tekst", siinse lause jutumärkideta, ning kõigile järgnevatele ridadele on järel-rida lisatud sõltumata regulaaravaldise poolt kirjeldatud otsisõne leidumisest.

sed -e '/g g/,$ a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus alates sisendteksti 2. reast üle kahe on väljundteksti lisatud lisarida ehk sisendteksti read 2,5,8,11,...

sed -e '2~3 a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus väljundtekstis on sisendteksti viimase rea järel lisarida.

sed -e '$ a v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Ridade lisamine selekteeritud rea ette

...käib käsuga i ja kõik ridadevahemike kalkulatsioonid on reanumbrite suurenemise suunas täpselt nagu käsu a korral, vaid algus on ühe sisendfaili-rea võrra üles poole nihkes.


Väljundtekstiks on sisendtekst, kus sisendteksti ridade 6,7,8 järgi on väljundteksti lisatud lisarida.

sed -e '7,+2 i v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus sisendteksti ridade 4,7,10,... järgi on väljundteksti lisatud lisarida.

sed -e '5~3 i v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Väljundtekstiks on sisendtekst, kus sisendteksti 1. rea ette, sisendteksti 1. reast üles ehk väljundteksti 1. reaks on lisatud lisarida.

sed -e '1 i v2ljundteksti_lisatud_rea_tekst' ./toretekstifail.txt


Teisest failist loetud ridade lisamine

Idee on, et read, mis lisatakse, loetakse sisse teisest tekstifailist.


Sisendteksti 3. rea järele lisatakse väljundtekstis kogu faili "loetav.txt" sisu.

echo "teisest faili rida 1"  > ./loetav.txt
echo "teisest faili rida 2" >> ./loetav.txt
sed -e '3  r  ./loetav.txt' ./toretekstifail.txt


Sisendteksti viimase rea järele lisatakse väljundtekstis kogu faili "loetav.txt" sisu.

echo "teisest faili rida 1"  > ./loetav.txt
echo "teisest faili rida 2" >> ./loetav.txt
sed -e '$ r  ./loetav.txt' ./toretekstifail.txt


Kõigi sisendteksti nende ridade järele väljundtekstis, kust otsisõne regulaaravaldisega leiti, lisatakse kogu faili "loetav.txt" sisu.

echo "teisest faili rida 1"  > ./loetav.txt
echo "teisest faili rida 2" >> ./loetav.txt
sed -e '/g.А/ r  ./loetav.txt' ./toretekstifail.txt


Konsooliprogrammi-väljund-ridade lisamine

Lisab väljundtekstis sisendteksti 4. rea ette ehk sisendteksti 3. rea järgi rea, kuhu on kirjutatud antud operatsioonisüsteemi-kasutaja nimi.

sed -e '4 e  whoami' ./toretekstifail.txt


sed -e '1 e  date' ./toretekstifail.txt # Lisab väljundtekstis 1. reaks programmi "date" väljundi.
sed -e '$ e  date' ./toretekstifail.txt # Lisab väljundtekstis eelviimaseks reaks programmi "date" väljundi.


echo "date"             >  ./k2sud.txt
echo "whoami"           >> ./k2sud.txt
echo "echo \"\$SHELL\"" >> ./k2sud.txt
sed -e 'e'                 ./k2sud.txt # käivitab k2sud.txt nagu tegu oleks konsooli-skriptiga



Ridade asendamine

Käsu c korral sisendfaili ei muudeta, muutused kajastuvad vaid väljundtekstis. Käsk "c" on nagu käsk "a", vaid selle erinevusega, et rea lisamise asemel rida asendatakse.


Väljundtekstiks on sisendtekst, kus alates sisendteksti 2. reast üle kahe on originaalrida asendatud uue reaga ehk asendatud on sisendteksti read 2,5,8,11,...

sed -e '2~3 c asendusrea_tekst' ./toretekstifail.txt


Realõpumärkide ja tabulatsioonimärkide kuvamine lisaridade lisamise näol

Väikese L-tähe ehk l käsu korral on tegu p-käsu laadse käsuga, kus rea-dubleerimisel kuvatakse tabulatsioonimärke ja realõpumärke, kuid lisavõimalusena on võimalik ette anda väljundteksti lisatava rea maksimum-pikkus, mille ületamisel lisatakse väljundteksti ühe lisarea asemel rohkem kui 1 lisarida. Realõppu tähistatakse väljundteksti lisatud ridades dollarimärgiga, "$", ning tabulatsioonimärki tähistatakse väljundteksti lisatud ridades sõnega "\t", jutumärkideta.


Nagu tavaline p-käsk, kuid dubleeritavatele ridadele lisatud lisa-infoga.

sed -e 'l' ./toretekstifail.txt


Ühe lisarea asemel võib olla rohke kui üks rida, iga lisarea pikkus maksimaalselt 5 tähemärki, koos lisarea enda reavahetusmärgiga maksimaalselt 6 tähemärki.

sed -e 'l 5' ./toretekstifail.txt