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,awko inclusogrep, es aconsejable utilizar un analizador XML.Respuestas:
O:
Para pasar el patrón de búsqueda como una variable:
Aquí, el uso en
ENVIRONlugar de-vas-vexpande 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
awk4.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_CORRECTvariable 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 awkusted 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>,xcambia 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, excambia nuevamente, y si no está en la última línea, tira de lanlínea de extensión ypenjuaga el espacio del patrón.qcierra. De lo contrario, solo agrega otro.carácter al espacio de espera y exvuelve 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