[linux] Re: 8-bits 'ascii' greppen...

Wybo Dekker wybo op servalys.nl
Za Jun 28 17:49:58 CEST 2008


Kees Theunissen wrote:

> Als ik aan het resultaat van jouw grep een paar regels toe voeg met
> alleen maar ascii tekens, maar sommige regels met een <TAB>, dan worden
> de regels met een <TAB> gewoon weegegeven door jouw grep. Zoals verwacht
> mag worden. Onderstaande expressie doet het wel goed.
> 
> LC_COLLATE=C grep '[^ -~[:cntrl:]]' test

Ja, klopt. Hangt er ook vanaf wat wat wel of niet zien wilt. Ik heb in 
de teksten die ik wil afzoeken geen tabs maar soms wel NULL-karakters 
die ik vangen wil. Die mis je dan.
Een alternatief is dan

grep "[^^A-~]" test

(waarin ^A voor control-A staat), dan vang je alles behalve karakters 
1-126 oftewel je vangt 0 en 127-255. En zo zijn meer combinaties te 
bedenken natuurlijk.
Wat ik eigenlijk liever zou willen is dat je gewoon hexadecimale ranges 
zou kunnen opgeven, dus bijvoorbeeld:

grep "[^0x00-0x7e]" test

maar dat krijg ik niet voor elkaar.

> Met die "LC_COLLATE=C" definieer je de sorteervolgorde.
> Dan weet je ook zeker dat de reeks "spatie tot en met tilde" de tekens
> bevat die je bedoelt, ongeacht de LOCALE die in gebruik is.

ja, dat is veel netter natuurlijk. En het is ook verstandig om grep  de 
-a optie mee te geven: als er voorin ergens bijvoorbeeld een control-A 
voorkomt zegt-ie anders: binary file matches.

-- 
Wybo



More information about the Linux mailing list