Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

grep: zoekwoorden vanaf stdin werkt anders dan verwacht

Pagina: 1
Acties:

Vraag


Acties:
  • 0Henk 'm!

  • aawe mwan
  • Registratie: december 2002
  • Laatst online: 20:09

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: 16:06

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: 22-06 22:31
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: 20:09

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: 16:06

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


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True