Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Vyhledání výrazu pomocí grep/sed  (Přečteno 7582 krát)

otava5

  • Návštěvník
  • Příspěvků: 3
Vyhledání výrazu pomocí grep/sed
« kdy: 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....
« Poslední změna: 22 Dubna 2018, 16:23:12 od otava5 »

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Vyhledání výrazu pomocí grep
« Odpověď #1 kdy: 22 Dubna 2018, 15:19:07 »
Neviem ci to ide s grep(asi nie) ale sed 's 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...
« Poslední změna: 22 Dubna 2018, 15:28:22 od TIBOR »
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

otava5

  • Návštěvník
  • Příspěvků: 3
Re:Vyhledání výrazu pomocí grep
« Odpověď #2 kdy: 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?
« Poslední změna: 22 Dubna 2018, 16:27:43 od otava5 »

TIBOR

  • Závislák
  • ***
  • Příspěvků: 6529
  • Som uzivatel linuxovej distribucie, som linuxak?
Re:Vyhledání výrazu pomocí grep/sed
« Odpověď #3 kdy: 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.
« Poslední změna: 23 Dubna 2018, 10:33:54 od TIBOR »
HP Laptop 17-ca1xxx Ubuntu Mate 22.04 FF 64bit.
Asus X751LB-TY014H Ubuntu Mate 20.04.1 FF 64bit.
Linus, Lajnas, Línus, Luínus, Lajnus a je mi naozaj jedno, ako ľudia vyslovujú moje meno. Ale "Linux" je vždy "Linux". LINUS TORVALDS, tvorca Linuxového jadra.(V dokumente Revolution OS)

 

Provoz zaštiťuje spolek OpenAlt.