cómo extraer campos con sed y regex

Tengo una entrada que se ve así:

[03/Jun/applications/somejunk/morejunk/ 200

Y quiero usar sed + regex para extraerlo en la forma:

03/Jun 200

Aquí está la expresión regular que estoy intentando, pero no puedo encontrar la manera de hacer que extraiga lo que quiero.

\([0-9]{2}/[a-zA-Z]{3}/\).* \([0-9]{3}\)

Cualquier ayuda sería increíble. Aquí está mi código de prueba:

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's,\\([0-9]{2}/[a-zA-Z]{3}/\\).* \\([0-9]{3}\\),\1 \2,g'

preguntado el 12 de junio de 12 a las 17:06

2 Respuestas

esto funciona

sed 's;\[\([0-9]\{2\}/[a-zA-Z]\{3\}\)[^ ]*\(.*\);\1\2;'

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's;\[\([0-9]\{2\}/[a-zA-Z]\{3\}\)[^ ]*\(.*\);\1\2;'
03/Jun 200

emparejar 2 dígitos [0-9]\{2\}
coincidir con una sola barra /
unir 3 letras [a-zA-Z]\{3\}
agruparlos en \1 -- eso es ponerlos entre paréntesis
hacer coincidir cualquier cosa hasta un espacio [^ ]*
haga coincidir todo después del espacio (incluido el espacio) y manténgalo en \2
retorno \1\2
\2 ya contiene un espacio

Respondido el 12 de junio de 12 a las 18:06

Intente lo siguiente:

sed 's,.\([0-9]\{2\}/[a-zA-Z]\{3\}\)/.* \([0-9]\{3\}\),\1 \2,'

Ejemplo:

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's,.\([0-9]\{2\}/[a-zA-Z]\{3\}\)/.* \([0-9]\{3\}\),\1 \2,'
03/Jun 200

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.