Bash: najít slovo a odpočítat znaky – Příkazový řádek – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Bash: najít slovo a odpočítat znaky – Příkazový řádek – Fórum – Programujte.comBash: najít slovo a odpočítat znaky – Příkazový řádek – Fórum – Programujte.com

 

Ralis0
Newbie
12. 5. 2019   #1
-
0
-

Dobrý den, 

prosím, měl bych dotaz ohledně filtrace číslového řetězce (znaky) v .txt souboru.

Dříve jsem to řešil pomocí příkazu cut a určil si rozmezí toho vyskytujícího řetězce, jenže je to nevyhovující, protože před tímto řetězcem se mění délky znaků...

Dám příklad co bych tedy potřeboval..

Mám zprávu v .txt, tu otevřu, uvnitř je např.:

blablabla,blablabla,4568789::55;blabl.;ID_msg:123456789;blablablabla.....

Systematicky bych postupoval: najít ve zprávě označení ,,ID_msg:" a říci, vše za tímto slovním řetězcem na 9 znaků vypiš, ostatní ne... výsledek by měl být 123456789, chápu to tak správně? Je možné to přes něco takto udělat? 

Děkuji moc za každou radu :)

Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:7d94:b760:13e6:3024...–
gna
~ Anonymní uživatel
1882 příspěvků
12. 5. 2019   #2
-
0
-

Nevím, jak ten cut používáš, ale v délce polí nevidím problém, pokud se nemění jejich pořadí.

echo 'blablabla,blablabla,4568789::55;blabl.;ID_msg:123456789;blablablabla' | cut -d\; -f3 | cut -d: -f2
123456789

Jestli je to csv, tak by to chtělo něco, co ho umí správně parsovat (třeba csvkit), nebo to nedělat v bashi.

Nahlásit jako SPAM
IP: 213.211.51.–
Ralis0
Newbie
12. 5. 2019   #3
-
0
-

#2 gna

nn, je to hlavička zprávy, která je v .txt a potřebuji z ní dostat jen ID...

problém je ten, že před tím atributem ID_msg:... jsou další atributy a ty jsou proměnné, např.:

jednou je to .... blabla:123;ID_msg:123456789....

v druhem textaku je to zase třeba ....  blabla:12345;ID_msg:987654321....

nemůžu proto fixně nastavit pozici pro ten číselný řetězec ID_msg :/

Nahlásit jako SPAM
IP: 2a00:1028:919a:5eb6:7d94:b760:13e6:3024...–
gna
~ Anonymní uživatel
1882 příspěvků
12. 5. 2019   #4
-
0
-

To je zrovna příklad, u které se mění délka, ale ne pořadí polí, takže není problém.

Ale můžeš to udělat ještě konkrétněji třeba sedem.

echo 'blablabla,blablabla,4568789::55;blabl.;ID_msg:123456789;blablablabla' | sed 's/.*;ID_msg:\([0-9]\+\);.*/\1/'
Nahlásit jako SPAM
IP: 213.211.51.–
Ralis0
Newbie
12. 5. 2019   #5
-
0
-

#4 gna
tady posílám konkrétní zkrácený soubor...

 
echo "$(<*.bsr )"

O:8:"stdClass":3:{s:4:"dmDm";O:8:"stdClass":30:{s:9:"dmOrdinal";i:5;s:4:"dmID";s:9:"172918640";s:10:"dbIDSender";s:7:"6p4.......

a právě to dmID potřebuji dostat ,zkusím, jak jste ted psal :)

Nahlásit jako SPAM
IP: 88.102.151.–
Ralis0
Newbie
12. 5. 2019   #6
-
0
-

tak jsem vyzkoušel 

sed 's/.*dmID";s:9:"\([0-9]\+\);.*/\1/' ep-isds-168010.bsr > log.txt

ale nic to vypíše celý obsah souboru...

zkusil jsem tohle a to funguje: 

cat *.bsr | cut -d\; -f5 | cut -d: -f3 | sed 's/"//' | sed 's/"//'
Nahlásit jako SPAM
IP: 88.102.151.–
Kit+15
Guru
12. 5. 2019   #7
-
0
-

#5 Ralis
Tohle je přece úplně jiné zadání, než jsi měl původně. Zkus tohle: 

sed 's/^.*dmID";s:.:"\([^;]\+\)".*$/\1/' <ep-isds-168010.bsr

BTW: Proč to neděláš v PHP? Nemusíš to v něm parsovat a rovnou vybereš hodnotu, která tě zajímá.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ralis0
Newbie
13. 5. 2019   #8
-
0
-

#7 Kit
 

to v tom PHP, vůbec mě nenapadá, jak bych to v tom dělal, bylo by to lepší ano? 

Nahlásit jako SPAM
IP: 78.45.207.–
Kit+15
Guru
13. 5. 2019   #9
-
0
-

#8 Ralis

$var = unserialize($string);
var_dump($var);
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý