2012-06-12 1 views
0

У меня есть вход, который выглядит следующим образом:как извлечь поля с СЕПГ и регулярное выражение

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

И я хочу использовать патч в + регулярное выражение для извлечения его в виде:

03/Jun 200 

Вот regex Я пытаюсь, но я не могу понять, как сделать извлечения то, что я хочу.

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

Любая помощь была бы замечательной. Вот мой тестовый код:

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

ответ

1

это работает

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 

матч 2 цифры [0-9]\{2\}
матч один слэш /
матч 3 буквы [a-zA-Z]\{3\}
группа их в \1 - это не круглые скобки их
матча ничего, пока пространство [^ ]*
матча все после пространства (включая пространство) и удерживайте ее в \2
возвращения \1\2
\2 уже содержит пробел

0

Попробуйте следующее :

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

Пример:

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's,.\([0-9]\{2\}/[a-zA-Z]\{3\}\)/.* \([0-9]\{3\}\),\1 \2,' 
03/Jun 200 
Смежные вопросы