bash – ¿Cómo hacer grep para pestañas sin usar pestañas literales y por qué \ t no funciona?

Pregunta:

Cuando busco pestañas en un archivo con (e) grep, uso la pestaña literal ( ^v + <tab> ). No puedo utilizar \t como reemplazo de pestañas en expresiones regulares. Con, por ejemplo, sed, esta expresión funciona muy bien.

Entonces, ¿hay alguna posibilidad de usar un reemplazo no literal para <tab> y cuáles son los antecedentes para un \t no funcional / no interpretado?

Respuesta:

grep utiliza expresiones regulares definidas por POSIX . Por las razones que sean, POSIX no ha definido \t como tab.

Tienes varias alternativas:

  • dígale a grep que use las expresiones regulares definidas por perl (perl tiene \t como tabulador):

     grep -P "\t" foo.txt

    la página de manual advierte que se trata de una función "experimental". al menos \t parece funcionar bien. pero es posible que las funciones de expresiones regulares de perl más avanzadas no lo sean.

  • use printf para imprimir un carácter de tabulación para usted:

     grep "$(printf '\t')" foo.txt
  • use el carácter de tabulación literal:

     grep "^V<tab>" foo.txt

    es decir: escriba grep " , luego presione ctrl+v , luego presione tab , luego escriba " foo.txt . presionar ctrl+v en la terminal hace que la siguiente tecla se tome literalmente. eso significa que la terminal insertará un carácter de tabulación en lugar de activar alguna función vinculada a la tecla de tabulación.

  • use la función de citas ansi c de bash:

     grep $'\t' foo.txt

    esto no funciona en todos los shells.

  • usar awk:

     awk '/\t/'
  • usar sed:

     sed -n '/\t/p'

Consulte el artículo de wikipedia sobre expresiones regulares para obtener una descripción general de las clases de caracteres definidas en POSIX y otros sistemas.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım