cómo extraer campos con sed y regex
Frecuentes
Visto 6,189 veces
0
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'
2 Respuestas
1
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
0
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 regex sed or haz tu propia pregunta.