Sziasztok!
hogy tudom azt awk progfile-lal megtenni, hogy egy fajlbol amiben kapcsos zarojelek tomege van,
ha 2 osszetartozo kapcsos zarolej kozott van az en keresett szovegem, akkor irja ki nekem az osszetartozo kapcsos zarojelek kozotti resz(eke)t?
u.i. a kapcsos zarojelek lehetnek egy masik kapcsos zarojelben is.
- 510 megtekintés
Hozzászólások
Hátha ezekben van valami érdekes:
https://unix.stackexchange.com/questions/524281/using-awk-to-find-match…
https://unix.stackexchange.com/questions/440800/print-text-before-and-a…
- A hozzászóláshoz be kell jelentkezni
https://www.shellhacks.com/sed-awk-print-lines-between-two-patterns/
Nem teljesen definiáltad a problémát. Minden kapcsos zárójel pár közötti szöveget szeretnél kiíratni, esetleg csak a legbelső pár tartalmát? Segítene ha megadnál egy példa be és kimenetet, különös tekintettel az egymásba ágyazott zárójelek esetét.
- A hozzászóláshoz be kell jelentkezni
ebbol [file.txt]:
{
"cn": 220,
"cd": "Public",
"vss": [
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 41,
"rn": "u",
"rd": 27,
"pm": "A",
"se": "",
"as": [
"a",
"b",
],
"ns": [
"A",
"N"
]
}
},
{
"name": "A.v",
"id": "A.v",
"properties": {
"cn": 42,
"rn": "v",
"rd": 28,
"pm": "B",
"se": "",
"as": [
"c",
"d",
],
"ns": [
"B",
"C",
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 43,
"rn": "d",
"rd": 29,
"pm": "C",
"se": "",
"as": [
"a",
"b",
],
"ns": [
"E",
"F"
]
}
}
]
}
},
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 44,
"rn": "x",
"rd": 30,
"pm": "L",
"se": "",
"as": [
"p",
"q",
],
"ns": [
"X",
"Y",
{
"name": "A.x",
"id": "A.x",
"properties": {
"cn": 48,
"rn": "u",
"rd": 33,
"pm": "K",
"se": "",
"as": [
"g",
"h",
],
"ns": [
"T",
"U"
]
}
}
]
}
},
]
}
ezt [out.txt]:
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 41,
"rn": "u",
"rd": 27,
"pm": "A",
"se": "",
"as": [
"a",
"b",
],
"ns": [
"A",
"N"
]
}
}
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 43,
"rn": "d",
"rd": 29,
"pm": "C",
"se": "",
"as": [
"a",
"b",
],
"ns": [
"E",
"F"
]
}
}
{
"name": "A.u",
"id": "A.u",
"properties": {
"cn": 44,
"rn": "x",
"rd": 30,
"pm": "L",
"se": "",
"as": [
"p",
"q",
],
"ns": [
"X",
"Y",
{
"name": "A.x",
"id": "A.x",
"properties": {
"cn": 48,
"rn": "u",
"rd": 33,
"pm": "K",
"se": "",
"as": [
"g",
"h",
],
"ns": [
"T",
"U"
]
}
}
]
}
}
ahol a { utan jon nem { ezzel a patternnel pl.: name A.u
awk -f awk.txt file.txt > out.txt
Elore is koszonom
- A hozzászóláshoz be kell jelentkezni
Ragaszkodsz az awkhoz? az a txt igazából json, arra vannak céleszközök.
- A hozzászóláshoz be kell jelentkezni
a cuccon csak awk es grep van....
szoval igen :-)
- A hozzászóláshoz be kell jelentkezni
Arra vigyázz, hogy ha mondjuk stringben vagy kommentben van { karakter, az meghülyítheti a parzert. Nem tudom fejből a JSON speckót, hogy megengedi-e az ilyen trükköket, de általánosságban is igaz, hogy az adott formátum rendes parzerét érdemes használni nem véletlenül.
Speciális eseteket meg lehet persze kókánnyal is oldani, ha például biztosan tudod, hogy nem lesz benne semmi vicces eset. Aztán 5 év múlva meg lesz, és senki nem fogja tudni, hogy miért nem működik :-)
- A hozzászóláshoz be kell jelentkezni
biztosan nem lesz benne vagy ha igen, akkor ugy kell keresni, hogy
{[^{|\\{]*KERESES mert valoszinuleg ha lenne benne az escape-eve lenne
- A hozzászóláshoz be kell jelentkezni
JSON-ben a kapcsos zárójelet kötelező eszképelni stringben? Fogalmam sincsen, de mivel a string lezárója a macskaköröm valamelyik változata, ezért arra tippelnék, hogy nem kell eszképelni. Tehát ez nem lesz tökéletes.
- A hozzászóláshoz be kell jelentkezni
Nem. Dupla macskakörmöt, backslasht, meg a kontroll charokat kell csak.
- A hozzászóláshoz be kell jelentkezni
komment hálisten nincs, a json buta, de string közepén simán figyel escapeletlen cici.
- A hozzászóláshoz be kell jelentkezni
esetleg egy kis python, vagy valami? ez regexel sose lesz valami megbízható, meg nem tudom, pl mennyire kell a végének is valid jsonnak lenni, mert ott azért még a vesszők pl hogyan lesznek külön mókás :)
- A hozzászóláshoz be kell jelentkezni
Akkor tegyed fel a jq-t, nem hiszem el, hogy nem oldható meg. Tényleg nem lerázásból meg rosszindulatból írom, de erre valók a céleszközök, a jq konkrétan nem is egy nagy méretű tool, benne van minden disztró tárolójában, de mivel nem nagy kódméret, akár még forráskódból is bármikor kipörgethető, és ilyenkor még rendszergazdai jog sem kell, legfeljebb a make install részt kihagyod, és csak simán a make után létrejött binárist használod a user mappájából.
Ez a HTML, json, stb. parse-olása tipikusan az a műfaj, amire nem ajánlják a szabályos kifejezéseket, és az ezekhez kapcsolódó eszközöket (sed, grep, awk, pcre, stb.). Nagyon sokan megpróbálták már újra feltalálni a kereket, és regexp-pel nekimenni a témának, de garantált kudarc lesz a vége. Mert a regexp nem tudja értelmezni a beágyazott tag-struktúrákat, főleg, mikor többszörösen vannak egymásba ágyazva, meg bezavar escape-elt karakter is. Értem, hogy mondtad, hogy ilyenek a te fájlodban nem lesznek, és el is hiszem, hogy most nincsenek, de később garantáltan elő fog ilyen kerülni.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
https://stackoverflow.com/questions/2583472/regex-to-validate-json
nem tűnik teljesen reménytelennek.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Koszonom. Ez jo lesz.
- A hozzászóláshoz be kell jelentkezni