Usando esto:
grep -A1 -B1 "test_pattern" file
producirá una línea antes y después del patrón coincidente en el archivo. ¿Hay alguna forma de mostrar no líneas sino un número específico de caracteres?
Las líneas en mi archivo son bastante grandes, así que no estoy interesado en imprimir la línea completa, sino que solo observo la coincidencia en contexto. ¿Alguna sugerencia sobre cómo hacer esto?
Respuestas:
3 caracteres antes y 4 caracteres después
fuente
brew install homebrew/dupes/grep
y ejecútelo comoggrep
.Esto coincidirá con hasta 5 caracteres antes y después de su patrón. El modificador -o le dice a grep que solo muestre la coincidencia y -E que use una expresión regular extendida. Asegúrese de poner las comillas alrededor de su expresión, de lo contrario, podría ser interpretada por el shell.
fuente
{0,255}
funciona{0,256}
dagrep: invalid repetition count(s)
Podrías usar
fuente
Quieres decir así:
?
Eso imprimirá hasta veinte caracteres a cada lado de
test_pattern
. La\{0,20\}
notación es como*
, pero especifica de cero a veinte repeticiones en lugar de cero o más.-o
Dice que muestre solo la coincidencia en sí, en lugar de la línea completa.fuente
grep: Invalid content of \{\}
Con
gawk
, puede usar la función de coincidencia:Si está de acuerdo con
perl
una solución más flexible: a continuación se imprimirán tres caracteres antes del patrón, seguidos por el patrón real y luego 5 caracteres después del patrón.Esto también se puede aplicar a palabras en lugar de solo caracteres. A continuación se imprimirá una palabra antes de la cadena coincidente real.
A continuación se imprimirá una palabra después del patrón:
A continuación se imprimirá una palabra antes del patrón, luego la palabra real y luego una palabra después del patrón:
fuente
Puede usar regexp grep para encontrar + segundo grep para resaltar
23_cadena_y
fuente
Nunca recordaré fácilmente estos modificadores de comandos crípticos, así que tomé la respuesta principal y la convertí en una función en mi
~/.bashrc
archivo:Esto es lo que parece en acción:
El archivo en cuestión es una línea continua de 25K y es imposible encontrar lo que está buscando usando regular
grep
.Observe las dos formas diferentes en que puede llamar a
cgrep
esegrep
método paralelo .Hay una forma "niftier" de crear la función donde "$ 2" solo se pasa cuando se establece, lo que ahorraría 4 líneas de código. Sin embargo, no lo tengo a mano. Algo así como
${parm2} $parm2
. Si lo encuentro, revisaré la función y esta respuesta.fuente