Udv!
adott egy xml file, amiben talalhato egy failures="11" resz.
grep-pel ki kellene tudnom szedni csak es kizarolag a szamerteket
Ha valaki pro regex-ben, tudna segiteni?
elore is koszonom
- 994 megtekintés
Hozzászólások
elsore ilyesmi:
$ echo -e "failures=11 foo\nbarother failures=12" | grep -Po "(?<=failures=)\d+"
11
12
- A hozzászóláshoz be kell jelentkezni
sajnos nem jo. a failures=11 helyett failures="11" van a file-ban. kiprobaltam, amit irtal, csak a grep reszt utana megadva az xml file nevet, syntax error-t kapok
U-dash
- A hozzászóláshoz be kell jelentkezni
echo -e "failures="11" foo\nbarother failures="12"" | grep -Po "(?<=failures=)\d+"
11
12
- A hozzászóláshoz be kell jelentkezni
oke, de:
#echo -e "failures="11" foo\nbarother failures="12""
failures=11 foo
barother failures=12
#echo -e 'failures="11" foo\nbarother failures="12"'
failures="11" foo
barother failures="12"
neked aztan fura humorod van...
- A hozzászóláshoz be kell jelentkezni
Ne nekem mondd, érdemben nem foglalkoztam vele, csak tibyke kódjához írtam két karaktert. :)
- A hozzászóláshoz be kell jelentkezni
echo -e "failures="11" foo\nbarother failures="12""
failures=11 foo
barother failures=12
- A hozzászóláshoz be kell jelentkezni
És? Az eredeti is ezt csinálja, by tibyke. Értsétek már meg, hogy nem foglalkoztam ezzel ennél jobban. :D
- A hozzászóláshoz be kell jelentkezni
De beraktad a 2 dupla idézőjelet, aminek semmi értelme, mert a shell ugyanúgy megeszi, és az echo nem írja ki. Azt értjük hogy a regexszel nem foglalkoztal, de az idézőjelek nem sikerültek.
- A hozzászóláshoz be kell jelentkezni
grep -Po "(?<=failures=)\d+" filenam.xml
ebben a formaban a result ures.
grep -oP 'failures="\K[^"]*"' filename.xml
eredmeny : 11"
U-dash
- A hozzászóláshoz be kell jelentkezni
Helyesen:
grep -Po "(?<=failures=\")\d+(?=\")"
Az echod elnyeli az idézőjeleket.
- A hozzászóláshoz be kell jelentkezni
echo -e "failures=\"11\" foo\nbarother failures=\"12\"" | grep failures | sed 's/[a-zA-Z=" ]//g'
- A hozzászóláshoz be kell jelentkezni
A sed nem grep, de ha bármit lehet, legyen tr a grep után:
grep failures | tr -dc '[0-9\n]'
- A hozzászóláshoz be kell jelentkezni
És?
Gondolod, hogy a kérdező rendszerén nincs fönn a sed?
Esetleg tiltja a vallása a használatát? Szeret hátrabilincselt kézzel tangózni? Kés ÉS villa helyett csak késsel enni?
- A hozzászóláshoz be kell jelentkezni
Szerintem a sed is jo lehet, illetve barmi, ami egy default linux kornyezetben biztosan elerheto, viszont a gondom az, hogy az echo "akarmi" lathatoan teljesen mas, mint amikor a grep-nek megadom az akarmi.xml file-t. ez utobbira lenne szuksegem
U-dash
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Kérlek bocsáss meg, ha valami ostobaságot feltételezek rólad, de ebből a kérdésből nekem úgy tűnik, hogy neked egyáltalában a leghalványabb fogalmad sincs arról, hogyan is működik a UNIX.
Tehát blr megoldása:
grep -Po "(?<=failures=\")\d+(?=\")" akarmi.xml
Az én megoldásom:
cat akarmi.xml | grep failures | sed 's/[a-zA-Z=" ]//g'
További sok sikert!
- A hozzászóláshoz be kell jelentkezni
Erre amugy mi szukseg volt?
Azert kerdezek/kerek segitseget, mert valamihez nem ertek, nem tudom megoldani, elakadtam benne stb. Azt gondoltam egy forum erre valo, es nem szegyen kerdezni. Ezzel szemben neked valamiert fontos volt a fejemhez vagni, hogy "a leghalvanyabb fogalmam sincs rola". Ez semmikepp sem epito kritika, sokkal inkabb serto, pedig en senkihez sem serto hangnemben alltam hozza. Par hozzaszolassal lejjebb egy masik forumtars javaslatanak a segitsegevel meg tudtam oldani, amire szuksegem volt, es ott megkoszontem MINDENKINEK a segitseget.
Bizom benne, hogy jobb lett a napod, az enyemet rosszabba tetted, koszonom, szuksegem volt ra....
Azt sem ertem, aki ehhez meg +1-gyelt is
Legkozelebb tobbszor is meggondolom, hogy kerjek-e barmiben segitseget, amirol a leghalvanyabb fogalmam sincs
U-dash
- A hozzászóláshoz be kell jelentkezni
Legkozelebb tobbszor is meggondolom, hogy kerjek-e barmiben segitseget, amirol a leghalvanyabb fogalmam sincs
Hát itt volna a kutya lényege elásva...
Kaptál két (!) működő megoldást (egyet tőlem, egyet blr-től), majd Zahy-tól még egyet, plusz egy javaslatot egy alternatív eszközre, amit elutasítottál.
Ha neked ebből azt a következtetést sikerült levonnod, hogy nem érdemes kérdezni, akkor tényleg nem érdemes, de ez nem a mi hibánk.
A fórum valóban erre való, kérdezni nem szégyen, de van a nemtudásnak az a szintje, amin csak tanulással lehet segíteni, nem azzal, hogy válaszolunk neked. Az meg a te dolgod.
Felépítettük neked több jó megoldás vázát, arra viszont nem voltunk felkészülve, hogy te valójában azt nem tudod, hogy a grep-nek melyik végén megy be a kőolaj.
Ilyen ez a szeszipar.
- A hozzászóláshoz be kell jelentkezni
Hat nem emlekszem, hogy elutasitottam volna barmit, az adott rendszerhez nincs hozzaferesem, a grep tuti, hogy van, szerintem sed is, a tobbit sajnos nem tudom. Egyiktek megoldasara sem mondtam, hogy rossz, valoszinuleg en nem tudtam ugy hasznalni, ahogy kellett volna, Zachy-et meg igen.
De mindegy, nem leszunk szerintem kozos nevezon, en nem fogadom el, hogy jart nekem a koki, te pedig valoszinuleg nem fogod belatni, hogy felesleges volt a tudasom hianyossagat minositeni. Mindegy, megegyszer a te idodet is koszonom, amit a kerdesemre szantal.
udv
U-dash
- A hozzászóláshoz be kell jelentkezni
Amugy most volt idom, kiprobaltam megegyszer. blr megoldasa tokeletesen mukodik, a tied sajnos nem.
U-dash
- A hozzászóláshoz be kell jelentkezni
Egészen biztosan működik a megoldásom, ugyanis voltam annyira alapos, hogy kipróbáljam, mielőtt ideírtam.
Ez az állítás természetesen az itt a fórumon látható teszt bemenetre vonatkozik, és nem a te konkrét anyagodra, hiszem arról nem tudhatok semmit azon kívül, amennyit elárultál róla. Nem szűri ki például az XML-ben szokásos <> karaktereket, már ha vannak a kérdéses formátumú sorokban ilyenek. De ezt hangsúlyozottan nem tudhatom.
- A hozzászóláshoz be kell jelentkezni
A te megoldásod már azon elvérzik, ha kiveszed az inputból a \n-t… Szóval bármilyen XML-en elvérzik, ahol még ha szépen formázott is, de van legalább még egy property, aminek szám a paramétere.
- A hozzászóláshoz be kell jelentkezni
Így van.
Erre mondtam, hogy a megoldásom az itt látható teszszövegre helyesen működik, az XML-t meg nem tudhatom, mert sose láttam.
És természetesen erre vonatkozik az a korábbi állításom is, hogy emberünk kapott egy vázat, amit továbbfejleszthetne, ha egyáltalán értene hozzá bármennyire.
- A hozzászóláshoz be kell jelentkezni
Erre megoldás lehet az, ha minden "<" elé, és minden ">" után berak egy sortörést, és az így tördelt fájlon már "rendesen" tud dolgozni egy másik sed:
sed 's/</\
</g
s/>/>\
/g' valami.xml | sed -n '/failures/s/\(^.*=\"\)\([0-9.]*\)\(.*$\)/\2/p'
De lehet fordítva is menni: tr -d -vel egy sorba összepakolni, aztán az elejétől a failures=" -ig és a számok és pont utántól mindent törölni...
- A hozzászóláshoz be kell jelentkezni
Szereted a macskákat? :-)
grep failures akarmi.xml | sed ... sok leütéssel rövidebb.
- A hozzászóláshoz be kell jelentkezni
Igen, szeretem a macskákat és igen, 5 karakterrel rövidebb, így amennyiben ínhüvely gyulladásra optimalizálunk, akkor mindenképpen a tiéd a jobb.
Egyébként pont ugyanilyen vita folyt már itt évekkel ezelőtt és emlékemim szerint ott se sikerült meggyőznöm senkit arról, hogy ilyen esetekben ez max. stiláris kérdés, a gyakorlati jelentősége a nullával egyenlő, hacsak nem valami monumentális adatmennyiséget akarunk feldolgozni, mert ott tényleg van helye efféle optimalizációknak (már nem az ínhüvelynek, hanem mondjuk a futtatott programok számának).
Jelen esetben persze mindez még a lényegtelennél is lényegtelenebb, hiszen a kérdező szerint a megoldásom nem is működik, se macsával, se anélkül. :-D
- A hozzászóláshoz be kell jelentkezni
grep -o 'failures="[0-9][0-9]*"' | grep -o '[0-9][0-9]*'
A trükk a -o opcióban van :-)
- A hozzászóláshoz be kell jelentkezni
igen, kb ez lett a jo megoldas:
grep -o 'failures="[0-9][0-9]*"' filename.xml | grep -o '[0-9][0-9]*'
es ez valoban a failures erteket adja vissza idezojelek nelkul.
kicsit fura, hogy egy grep-pel nem megy, de atmenetileg biztosan jo lesz.
koszonom mindenkinek a segitseget
U-dash
- A hozzászóláshoz be kell jelentkezni
mar hogyne menne?!
- A hozzászóláshoz be kell jelentkezni
Nem jo tool-t hasznalsz. Ha XML, akkor hasznalj a jq xml megfelelojet, xq-t ilyenekhez.
https://www.ashbyhq.com/blog/engineering/jq-and-yq
A grep szoveges file-okhoz valo, nem mar alapbol strukturalt adatformatumhoz.
- A hozzászóláshoz be kell jelentkezni
Sajnos nincs lehetosegem egyeb tool-okat hasznalni, de koszonom a javaslatot :)
U-dash
- A hozzászóláshoz be kell jelentkezni
Awk-t sem? Ez valami házi feladat?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem hazi feladat. Egy GitHub action, aminek az alapjait ado linux-hoz nem ferek hozza olyan szinten, hogy telepiteni tudjak ra barmit, vagy megnezni, hogy elerheto-e. grep tuti van, ezert jott ez a verzio munkatarsamtol.
U-dash
- A hozzászóláshoz be kell jelentkezni
Nekem még a kis műanyag szappantartó routeremen is van awk, és awk-val az ilyen problémák remekül megoldhatók, mert egyfelől ismeri a regexp-et, másfelől egy teljes scrip nyelv C-hez közeli szintaxissal. Épp ezért kérdeztem, mert awk-ban kb. bármit meg tudsz oldani, ami szöveges file feldolgozása. Vannak változóid, asszociatív tömbjeid, de ha kell, még cosinus függvényed is. :) Persze így, hogy már van megoldás, nem érdekes, inkább általában mondom.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
akkor siman elkepzelheto, hogy itt is van. koszonom az otletet.
U-dash
- A hozzászóláshoz be kell jelentkezni
Talan tudok segiteni: ilyenkor en grep-pel kiszurom a megfelelo sorokat, aztan cut -tal kivagom a megfelelot, kb. igy:
blabla | grep 'failures="' | cut -d'"' -f5
Persze nyilvan a grep-et meg a cut 'field' (f) parameteret be kell allitani. cut szinte biztosan lesz az image-ben, amelyikben grep van.
- A hozzászóláshoz be kell jelentkezni
Mindig meghal egy aranyos kiscica, amikor xml-t greppel valaki.
- A hozzászóláshoz be kell jelentkezni
Vannak helyek, ahol nem lehet mindenfélét telepíteni. Ha az elérhető repókban nincs xmlstarlet vagy éppen yq, akkor marad a grep. Ezt viszont adott esetben el kell fogadni.
- A hozzászóláshoz be kell jelentkezni
nem egeszen. alapvetoen a te dontesed, hogy melyik image-n futtatod a github action-t. valasszatok olyat, amin van minden olyan tool, ami a korrekt, jo munkahoz szukseges. Ha nincs, alapvetoen megintcsak trivialis egy Dockerfile-t csinalni, amibe apk/apt -val belerakod, ami kell, es fel-pusholod dockerhub-ra. De legalabbis sokkal gyorsabb, mint orakat szoszolni egy vegeredmenyben megbizhatatlan grep -en, ami az elso xml formatum valtozasra osszefossa magat.
- A hozzászóláshoz be kell jelentkezni
Ennel sajnos joval komplexebb a dolog, viszont erdekelne, hogy honnan tudhatom, hogy milyen image-ek elerhetok hasznalatra, es azokban mi erheto el? Kesobb szivesen futnek egy kort ezzel.
U-dash
- A hozzászóláshoz be kell jelentkezni
uhum, docker run -nal futtasd az image-t. github actions nem az ujjabol szopja az image-eket, hanem meg kell neki mondani, melyiket hasznalja, pl. lasd: https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-contain…
- A hozzászóláshoz be kell jelentkezni
Tudom, en is oltem mar igy kiscicat :) Nem vagyok ra buszke.
- A hozzászóláshoz be kell jelentkezni