Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: otava5 22 Dubna 2018, 07:35:00

Název: Vyhledání výrazu pomocí grep/sed
Přispěvatel: otava5 22 Dubna 2018, 07:35:00
Zdravím.
Dal by se udělat bash script (příkaz grep) na vyhledat výraz v souboru1 mezi určitými dvěma slovy a doplnit ho do souboru2 mezi dvě určitý slova v čísle řádku?
Příklad:
soubor1 obsahuje: /paprika/007/okurka
soubor2 obsahuje: /banán/rajče
Výsledek např. chci: /banán/007/rajče v souboru2 řádce č.10

Děkuji....
Název: Re:Vyhledání výrazu pomocí grep
Přispěvatel: TIBOR 22 Dubna 2018, 15:19:07
Neviem ci to ide s grep(asi nie) ale sed 's (https://www.computerhope.com/unix/used.htm) by to mohol vediet. Len popis je trochu strohy, nevieme ci to ma byt jednorazovy prikaz s rovnakymi parametrami alebo viac parametrov spracovavanych v jednom skripte...
Název: Re:Vyhledání výrazu pomocí grep
Přispěvatel: otava5 22 Dubna 2018, 16:21:37
Ano zapomněl jsem dodat že číslo mezi slovy v souboru1 se mění každý den....Byl by to příkaz používaný každý den....
Můžete poradit tedy ten sed?
Název: Re:Vyhledání výrazu pomocí grep/sed
Přispěvatel: TIBOR 23 Dubna 2018, 10:32:15
Tak kedze sa tym nezivym tak som zlepil zatial toto
Kód: [Vybrat]
#!/bin/bash

vstupny_subor='/cesta_k_suboru1/subor1'
vystupny_subor='/cesta_k_suboru2/subor2'
cislo=$(cat "$vstupny_subor"|awk -F"/" '{print $3}')
riadok=$(sed -n '10p' "$vystupny_subor")
#zapis_riadok=$(echo "$riadok"|sed -r -e 's/^.{6}/&\/'$cislo'/')
meno1=$(echo "$riadok"|awk -F"/" '{print $2}')
meno2=$(echo "$riadok"|awk -F"/" '{print $3}')
zapis_riadok=$(echo /$meno1/$cislo/$meno2)
sed -i.bak '10d' "$vystupny_subor"
sed -i 10i$zapis_riadok "$vystupny_subor"
Prvy riadok urcuje cim sa spracuju nasledujuce riadky.
Treti riadok urcuje cestu k suboru1(treba upravit), predpoklad podla zadania je ze tam je iba veta /paprika/007/okurka
Stvrty riadok urcuje cestu k suboru2(treba upravit), predpoklad podla zadania je ze na 10 riadku je /banán/rajče ktore treba upravit
Piaty riadok nacitava hodnotu medzi druhou a tretou zatvorkou a uklada ju do premennej.(subor1)
Siesty riadok nacitava 10 riadok suboru2 a uklada ho do premennej.
Kedze som nevedel ako jednoducho vlozit to cislo medzi tie dve slova tak na siedmom a osmom riadku si tie dve slova rozdelujem a ukladal zvlast do premennych.
V deviatom riadku si tie dve slova a cislo zoradim, doplnim o lomitka a ulozim do premennej.
V desiatom riadku zmazem 10 riadok v subore2 pretoze po doplneni o novy desiaty riadok by sa vsetko posunulo na novy riadok .
V jedenastom zapisujem vysledok /banán/007/rajče na 10 riadok suboru2.

U mna to na tom priklade fungovalo. Vyskusaj si to ci to pojde aj tebe.
Dufam ze sem daju riesenie aj ty co sa tym zivia a maju to v malicku. Tiez sa na takychto rieseniach ucim. :D

P.s Viac som pouzil awk a print ako ten sed co som spominal.