Hogyan kell grep a tabulátorokhoz anélkül, hogy szóköz lapokat használnék és miért nem működik?

118

Amikor egy (e) grep fájlban keresek lapokat, használom a litteral lapot (^v + <tab>). Nem használhatom a\t értéket a szabályos kifejezésekben lévő lapok helyettesítésére. Például pl. Ez a kifejezés nagyon jól működik.

Szóval van lehetőség arra, hogy a<tab> -ot nem litterális csere helyett használják, és mi a háttér a nem működő / nem értelmezett\t?

    
készlet Lasall 14.07.2011 13:59
forrás

4 válasz

165

A grep a POSIX által meghatározott szabályos kifejezéseket használja. A POSIX bármilyen okból kifolyólag nem határozta meg a\t as fület.

Több alternatíva van:

  • mondja a grep-ot, hogy a perl által definiált szabályos kifejezéseket használja (a perl\t mint lap):

    grep -P "\t" foo.txt
    

    a man oldal figyelmeztet arra, hogy ez egy "kísérleti" funkció. legalább\t úgy tűnik, hogy jól működik. de a fejlettebb perl regex funkciók nem.

  • A printf használatával kinyomtathatja az Ön számára egy lap karaktert:

    grep "$(printf '\t')" foo.txt
    
  • használja a szó szerinti fül karaktert:

    grep "^V<tab>" foo.txt
    

    ez a típus:grep ", majd nyomja meg actrl+v gombot, majd nyomja meg atab gombot, majd írja be a" foo.txt parancsot. actrl+v parancs megnyomása a terminálon azt eredményezi, hogy a következő kulcsot szó szerint kell venni. ez azt jelenti, hogy a terminál beilleszt egy fül karaktert a fül billentyűhöz kötött bizonyos funkciók kiváltása helyett.

  • Használja a bash bash ansi c quoting funkcióját:

    grep $'\t' foo.txt
    

    ez nem minden kagylóban működik.

  • use awk:

    awk '/\t/'
    
  • use sed:

    sed -n '/\t/p'
    

Tekintse meg a szabályos kifejezésekről szóló wikipédia cikket a POSIX és más rendszerek meghatározott karakterosztályainak áttekintéséhez.

    
válasz adott lesmana 14.07.2011 17:04
forrás
12

Nem éppen a válasz, amit hallani akarnál, de a menekülési sorozatok lehetséges használatát a bash

command | grep $'\t'

(ne tegye kettős idézőjelbe!).

    
válasz adott enzotib 14.07.2011 16:15
forrás
2
A

awk '/\t/' a kedvenc megoldásom:

printf 'a\t\nb' | awk '/\t/'

Kimenet:a\t.

    
forrás
1

Az ascii hex-kód használatához mindig használhatsz lapot:

$ echo "one"$'\t'"two" > input.txt                                 

$ grep -P "\x9" input.txt                                          
one two

$ grep $'\x9' input.txt                                            
one two
    
válasz adott Sergiy Kolodyazhnyy 03.07.2017 19:04
forrás