Cuando busco pestañas en un archivo con (e) grep, uso la pestaña literal ( ^v + <tab>). No puedo utilizar \tcomo 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 <tab>y cuáles son los antecedentes de un trabajo / no interpretado \t?
bash
grep
regex
posix-compliant
Lasall
fuente
fuente

Respuestas:
grep está utilizando expresiones regulares según lo definido por POSIX . Por alguna razón POSIX no se ha definido
\tcomo pestaña.Tienes varias alternativas:
dile a grep que use las expresiones regulares definidas por perl (perl tiene
\tcomo tabulador):la página del manual advierte que esta es una característica "experimental". al menos
\tparece funcionar bien. pero las características más avanzadas de perl regex pueden no seruse printf para imprimir un carácter de tabulación para usted:
usa el carácter de tabulación literal:
es decir: escriba
grep ", luego presionectrl+v, luego presionetab, luego escriba" foo.txt. Al presionarctrl+vel terminal, la siguiente tecla se tomará al pie de la letra. eso significa que el 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 cita ansi c de bash:
Esto no funciona en todos los depósitos.
usa awk:
usar sed:
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.
fuente
grep $'\t' foo.txt(pero normalmente escribiría enfgreplugar degrep)grep "$(printf '\t')${myvar}" foo.txt. Funcionó bien. Con algunos intentos, no pude conseguir que funcionara la última forma.grepno pueda interpretarse silenciosamente\tcomo tab? ¿POSIX requiere que eso\tsignifique algo más? ¿Quizás se supone que debe coincidir solo con un literal\seguido de unt?This is highly experimental and grep -P may warn of unimplemented features.Probablemente no sea una buena idea para usar-Pen sistemas heredados. Laprintfelección es mejorBash no es exactamente la respuesta que le gustaría escuchar, pero bash proporciona un posible uso de secuencias de escape
(¡no lo ponga entre comillas dobles!).
fuente
grep $'\t'.awk '/\t/'es mi solución favorita:Salida:
a\t.fuente
Siempre se puede recurrir al uso del código hexadecimal ascii para la pestaña:
fuente