Fórumok
Sziasztok!
Van néhány könyvtáram, bennük néhány száz .tex forráskódot tartalmazó file. Ezekben szeretnék kereséseket végrehajtani oly módon, hogy a grep figyelmen kívül hagyja a vezérlőkaraktereket (\#&%\{}- stb.) A preambulumban nincs értelmes szó, tehát ott értelemszerűen nem lesz találat.
Megoldható ez szerintetek?
Azt szeretnémelérni, hogy legyen egy kimenetem, amiben a fájlok neve is szerepel, amiben találat keletkezett.
Ilyen alaposan nem értek a BASH-hoz, elképzelhető, hogy a grep kevés ehhez. Szerintetek merre induljak el?
(mc-ben F9-c-f után panelize -- és megoldódott, de mindenképpen scripttel szeretném ugyanezt sajnos...)
Hozzászólások
A detex szerintem hasznos lehet.
Igen, vagy még az untex.
----------
Were antimatter present, its detection would be quite simple and straightforward. The most rudimentary detector suffices: simply place it down and wait. If the detector disappears, antimatter has been discovered - get out fast!
Így szoktam az ilyesmit:
find . -type f -name "*tex" | xargs grep eztkeresed | sed -e 's/[vezérlőkarakterek]//g'
"A megoldásra kell koncentrálni nem a problémára."
A TeX elég trükkös tud lenni, bele lehet futni sok csúnyaságba. Rögtön az ékezetes karaktereknél a régi \H{o} = ő, vagy \`\i{} = í jelöléseknél ha a parancsokat kukázod, akkor a szavakat is buktad. Ha vegyes szerzőktől vannak a fájlok, akkor biztosabb, ha lefordítod, aztán pdf2txt-vel csinálsz belőle text fájlt és abban keresel.
Pontosabban a text fájlokban érdemes még a kötőjel-sorvége mintákat kitörölni, hogy az elválasztott szavakat is megtaláld. Ha meg van fejléc-lábléc, akkor a lap utolsó sorának a végén elválasztott szavakat összeszedni még izgalmasabb kihívás...
A tex forrásnál maradva alábbival próbálkoznék:
A find megkeresi a tex fájlokat
Végigmegy rajtuk egy while ciklus
Az awk eldobálja a \begin{document} előtti részt.
A sed kidobálja \parancs a \parancs{ \parancs* \parancs*{ részeket, sőt a \parancs\parancs -csal is elbír.
A td-vel kidobálhatod a további fölösleges karaktereket,
a grep meg kiírja a találatokat
a végső awk meg kiírja a találatok elé a fájlnevet
Ha a fájlnevek csúnyák (szóközök és egyéb érdekességek), akkor persze még egy kicsit finomítani kell.
Pontosítom a kérdésemet.
Minden file az én írásom,melyben vannak olyan szavak, melyeket pl. \emph{így} írtam le. Néhol használok csak repülőékezeteket. Szóval az lenne a legjobb, ha a szokásos formázási karaktereket (miont az emph esetén) kihagyná a keresés.
Van ilyen is, amikor egy szót így írok le: szük\-sé\-ges-e (most ez nem konkrét példa, csak a vezérlőkarakterek miatt írtamle ezt)
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Azokat a szavakat, amelyeket a LaTeX rosszul választ el, vagy elválasztás szempontjából valamiért speciálisak, a
paranccsal külön is megadhatod, és akkor nem kell a szövegbeli előfordulásában beszúrni a "-" karaktert az elválasztási helyekre. Például
----------
Were antimatter present, its detection would be quite simple and straightforward. The most rudimentary detector suffices: simply place it down and wait. If the detector disappears, antimatter has been discovered - get out fast!
A szükséges szót jól választja el a TeX minden trükk nélkül, viszont a szón belüli kötőjelek megakadályozzák a többi ponton való elválasztást. Vagyis a szükséges-e kifejezést csak a kötőjelnél tudja elválasztani alapból.
Az egyik megoldás erre, ha az 1.5-ös magyar.ldf-ben definiált aktív karaktert használva szükséges`-e formában szedjük. Én ezt sem szeretem, mert pont az e előtti kötőjelnél nem szeretnék elválasztást engedélyezni, és az egy szál e betűt átvinni a következő sorba, szóval én csináltam magamnak erre egy saját shorthand-et a preambulumban:
Ezek után a szükséges`+e formában szedem, amit csak két ponton enged elválasztani: szük - sé - ges-e.
Hasonlóan patológiai szövegekben Y`+vágás.
Ez nagyon tetszik, szerintem kipróbálom.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Most már kiforrottabbá vált, mire is akarom ezt alkalmazni.
A TeXforráskódban a mondatvégi írásjelek utáni space meglétére szeretnék rákeresni, valamint arra, hogy minden mondat nagybetűvel kezdődik-e.
Egyelőre az alant található borzalmat sikerült megalkotnom, amely csak a mondatvégi pontokat nézi:
Ez kidob nekem egy kimenetet,melyet fájlba írva egy editorralmár manuálisan végig tudok futni. A script borzalmasan ronda, de egy könyvtárnyi adathalmazon már sikeresen előjöttek space-kimaradások,melyeket hosszú hónapok óta még nem szúrtam ki.
Aküzdelem fő oka az,hogy néha nem képes lenyomódni rendesen a klaviatúrámon a space billentyű...
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Milyen szerkesztőt használsz? Nálam a vim aláhúzással jelzi, ha pont után közvetlenül betű van.
mcedit,geany,texmaker, néha texstudio.
vi-t egyetemen ugyan tanultam, de agyfrészt kaptam tőle, pedig ergonomiai szempontok alapján tervezett editor.
Nem ástam bele magam, nekem már késő 50 felé...
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Mármint arra gondoltam, hogy sokféle szerkesztő van, amelyek képesek mindenféle nyelvi ellenőrzésre, pl. ilyen hibák jelzésére is. Nem kötelező vim és hasonló, szerintem sok más, "felhasználóbarátabb" szerkesztő létezik ilyen funkcióval.
Nem lenne jó,mert akkor atöbb százfájlomat egyesével kellene kezelnem. egy scripttel viszont ráküldöm cat-tal csővezetéken és ki van írvaminden space-hiba
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
De már gépeléskor jelezné ;)
az nem elég sajnos, a borzalmas szövegmennyiség egy részét gépírónő végzi
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
miert nem rakod egybe a sed-eket?
Nem tudom, hogyan kell.
Amúgy azért szoktam így, mert könnyebb átpakolni sorokat az exit0 utáni sorba, ha mégsem kéne...
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Uj billenytuzet? A hardver mindig olcsobb...
Ebben kétségeim vannak.
Nem vagyok jó fogyasztó
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
Megjavítottam a space-gombot a klaviatúrámon, a gumi és a billentyű közé raktam egy neopréncafatot.
Csak mechaniqss hibája volt, szerencsére nem a nyáklapon kopott ki valami
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.