Регулярное выражение - захват и замена выбранных последовательностей - PullRequest
3 голосов
/ 28 мая 2010

Возьмите следующий файл ...

ABCD,1234,http://example.com/mpe.exthttp://example/xyz.ext
EFGH,5678,http://example.com/wer.exthttp://example/ljn.ext

Обратите внимание, что "ext" - это постоянное расширение файла во всем файле.

Я ищу выражение, чтобы превратить этот файл во что-то вроде этого ...

ABCD,1234,http://example.com/mpe.ext
ABCD,1234,http://example/xyz.ext
EFGH,5678,http://example.com/wer.ext
EFGH,5678,http://example/ljn.ext

Короче говоря, мне нужно захватить все до URL. Затем мне нужно захватить каждый URL и поместить их в отдельную строку с ведущим захватом.

Я работаю с sed для этого и не могу понять, как заставить его работать правильно. Есть идеи?

Ответы [ 3 ]

5 голосов
/ 28 мая 2010

Если количество URL в каждой строке гарантированно равно двум, вы можете использовать:

sed -r "s/([A-Z0-9,]{10})(.+\.ext)(.+\.ext)/\1\2\n\1\3/" < input
1 голос
/ 28 мая 2010

Это не требует, чтобы первые два поля были определенной ширины или ограничивали набор (не запятых) символов между запятыми. Вместо этого он сам вводит запятые.

sed 's/\(\([^,]*,\)\{2\}\)\(.*\.ext\)\(http:.*\)/\1\3\n\1\4/' inputfile.txt

Вы можете изменить «2», чтобы соответствовать любому количеству полей, разделенных запятыми.

0 голосов
/ 28 мая 2010

В данный момент у меня нет доступного sed.

Не был бы

sed -r 's/(....),(....),(.*\.ext)(http.*\.ext)/\1,\2,\3\n\1,\2,\4/g' 

сделать трюк?

Редактировать : удален ленивый квантификатор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...