Estoy buscando mostrar la línea 4598 en el siguiente archivo. Efectivamente, quiero mostrar la línea DESPUÉS de la enésima aparición de una coincidencia. En este caso, la línea después de la tercera aparición de <Car>
. ¿Cómo hago esto?
<Car>
10456
</Car>
<Car>
70192
</Car>
<Car>
4598
</Car>
sed
,awk
o inclusogrep
, es aconsejable utilizar un analizador XML.Respuestas:
O:
Para pasar el patrón de búsqueda como una variable:
Aquí, el uso en
ENVIRON
lugar de-v
as-v
expande las secuencias de escape de barra invertida y las barras invertidas a menudo se encuentran en expresiones regulares (por lo que deberían duplicarse-v
).GNU
awk
4.2 o superior le permite asignar variables como expresiones regulares de tipo fuerte . Mientras su modo POSIX no esté habilitado (por ejemplo, a través de la$POSIXLY_CORRECT
variable de entorno, puede hacer lo siguiente:fuente
Aquí hay una perl:
Con GNU
grep
, también puede analizar su salida como:De
man grep
:fuente
Con
GNU awk
usted puede hacer:fuente
Aquí hay otra forma con
sed
:Esto está usando el espacio de espera para contar.
Cada vez que encuentra una línea que coincide
<Car>
,x
cambia los búferes y comprueba si hay exactamente N-1 de un carácter en el búfer de retención. Si la verificación es exitosa, ex
cambia nuevamente, y si no está en la última línea, tira de lan
línea de extensión yp
enjuaga el espacio del patrón.q
cierra. De lo contrario, solo agrega otro.
carácter al espacio de espera y ex
vuelve a cambiar.fuente
Aquí hay una solución de línea de comando simple.
Si cambia el valor de +3 después
tail
, puede especificar cualquier enésima línea.fuente