Toon posts:

grep: zoekwoorden vanaf stdin werkt anders dan verwacht

Pagina: 1
Acties:

Vraag


Acties:
  • 0Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 06-12 22:27

aawe mwan

Wat ook leuk is:

Topicstarter
Ik gebruik grep, maar deze keer wil ik het zoekwoord niet op de command line zetten, maar inlezen vanaf stdin.
Dit zodat het dan niet leesbaar is in de processenlijst en ik het ook niet in een normaal bestand hoef te zetten.

Ik gebruik daarvoor deze opties op de commandline:

code:
1
grep -r -f - -F -C 3 *
  • -r recursief
  • -f - lees zoekwoorden vanaf stdin
  • -F de zoekwoorden zijn normale tekst, geen regular expressions
  • -C 3 laat 3 regels context zien rond elke gevonden regel
  • * wat bestanden om mee te testen
Nou gebeurt er iets vreemds. Dit werkt namelijk alleen als ik het zoekwoord dat ik invoer op stdin op een speciale manier afsluit. Ik heb 2 manieren gevonden die werken:

«enter»«ctrl-d»«ctrl-d»

en

«ctrl-d»«ctrl-d»«ctrl-d»

Waarom werkt dit niet met gewoon één keer «ctrl-d», of «enter»«ctrl-d» ?

老厮是麂

Alle reacties


Acties:
  • 0Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 17:34

DaFeliX

Tnet Devver
«enter»«ctrl-d» werkt prima bij mij (grep (GNU grep) 3.4).

De grep zelf heeft wat tijd nodig om zijn actie uit te voeren, is het niet zo dat je te snel bent? Als je het eens herhaalt met:

code:
1
grep -r -f - -F -C 3 bestaatniet


probeert, dan zie je direct feedback op het moment dat je input is geaccepteerd door grep (en klaagt ie dat ie het bestand niet kan vinden).

Einstein: Mijn vrouw begrijpt me niet


Acties:
  • 0Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 11:49
Daarnaast is het normaal dat je twee keer ctrl-d moet gebruiken als je niet op een lege regel staat. Die ene keer extra zou inderdaad timing kunnen zijn; of heb je een gekke terminal emulator (of bepaalde instellingen) die er eentje opeet?

Acties:
  • 0Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 06-12 22:27

aawe mwan

Wat ook leuk is:

Topicstarter
Dit is toch wel een bijzonder verschil, want jullie zien het allebei niet.

De "bestaatniet" regel heb ik uitgevoerd op 4 systemen en er het volgende tabelletje van gemaakt. Ik heb de regels gesorteerd op versienummer van grep. Dit allemaal met dezelfde terminal (via SSH):

OSgrep (GNU grep)melding na
Debian 8 (jessie)2.20, 2014«enter»«ctrl-d»«ctrl-d»
Ubuntu 16.042.25, 2016«enter»«ctrl-d»«ctrl-d»
Ubuntu 18.043.1, 2017«enter»«ctrl-d»«ctrl-d»
Ubuntu 20.043.4, 2020«enter»«ctrl-d»

Als je dit lijstje zo ziet, lijkt het te maken te hebben met het versienummer van grep, maar dat is natuurlijk niet 100% zeker.

(Nog even uitgeprobeerd: als je tussen de eerste en de tweede ^D nog nieuwe regels entert, dan worden die gewoon toegevoegd aan de lijst van zoekwoorden. Maar na de tweede ^D stopt hij wel zeker met inlezen.)

[Voor 22% gewijzigd door aawe mwan op 18-05-2020 23:03]

老厮是麂


Acties:
  • 0Henk 'm!

  • hcQd
  • Registratie: September 2009
  • Nu online
Even voor de volledigheid: ˆD betekent niet end-of-file, maar zorgt ervoor dat de huidige, eventueel lege, regel wordt geflushed naar het programma dat staat te lezen van de tty,

Acties:
  • +1Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 17:34

DaFeliX

Tnet Devver
aawe mwan schreef op maandag 18 mei 2020 @ 17:48:
[...]

Als je dit lijstje zo ziet, lijkt het te maken te hebben met het versienummer van grep, maar dat is natuurlijk niet 100% zeker.

[...]
Met versie 3.3 (2018-12-21) kan ik het niet reproduceren, maar 3.1 wel. Het lijkt er inderdaad op dat dit sinds 3.2 of 3.3 anders werkt.

[EDIT]

Ik zie dat in Gnulib op 2018-06-24 een fix is uitgevoerd voor "Sticky EOF", zie https://raw.githubusercon.../gnulib/master/ChangeLog:

code:
1
2
Be more direct that we can't
assume stickiness of EOF for portability reasons.


Dit zal het probleem zijn geweest :)

[Voor 29% gewijzigd door DaFeliX op 19-05-2020 07:54]

Einstein: Mijn vrouw begrijpt me niet

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee