URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8264
[ Назад ]

Исходное сообщение
"Замена строк по шаблону regexp на тоже+изменения"

Отправлено tos , 15-Май-09 12:49 
Помогите написать скрипт на bash (с помощью sed и т.п.) замены в текстовом файле строк по шаблону (ip адреса) на теже ip адреса + изменения вокруг них:
кусок исх. файла:

<TD align=center> 21</TD>
<TD align=center>qwe41</TD>
<TD>219.32.246.07<br/> 228.34.67.45</TD>
<TD>14.2.87.150<br/> 14.2.87.210</TD>


Необходимо получить:
<TD align=center> 21</TD>
<TD align=center>qwe41</TD>
<TD>[http://219.32.246.07 219.32.246.07]<br/>http://228.34.67.45 228.34.67.45]</TD>
<TD>14.2.87.150<br/> 14.2.87.210</TD>

Regexp для ip я уже составил: 2+\d*\.\d*.\d*\.\d* . Вопрос как заменять скриптом.


Содержание

Сообщения в этом обсуждении
"Замена строк по шаблону regexp на тоже+изменения"
Отправлено phpcoder , 15-Май-09 15:37 
sed -i 's|\(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|[\1 \1]|g' file

"Замена строк по шаблону regexp на тоже+изменения"
Отправлено tos , 15-Май-09 16:38 
>sed -i 's|\(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|[\1 \1]|g' file

А можно расшифровать? s|\  как это работает? далее тоже встречается |


"Замена строк по шаблону regexp на тоже+изменения"
Отправлено phpcoder , 15-Май-09 16:44 
>>sed -i 's|\(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|[\1 \1]|g' file
>
>А можно расшифровать? s|\  как это работает? далее тоже встречается |

А что тут расшифровывать? :) В Perl/sed есть инструкция s/А/B/, которая заменяет A на B, в качестве разделителя используется косой слэш. Но также можно задать свой разделитель, я лично всегда использую прямую черту: s|||

В качестве того что заменять используется регулярное выражение: \(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\) которой означает что нужно найти IP-адрес, который начинается с двойки и "запомнить" его (это делают круглые скобки).

В качестве того на что заменять используется [\1 \1] в которое вместо \1 подставляется то, чтобы было найдено и запомнено раньше.

Доступно излагаю? :)


"Замена строк по шаблону regexp на тоже+изменения"
Отправлено tos , 15-Май-09 17:21 
>[оверквотинг удален]
>
>
>В качестве того что заменять используется регулярное выражение: \(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\) которой означает что
>нужно найти IP-адрес, который начинается с двойки и "запомнить" его (это
>делают круглые скобки).
>
>В качестве того на что заменять используется [\1 \1] в которое вместо
>\1 подставляется то, чтобы было найдено и запомнено раньше.
>
>Доступно излагаю? :)

Понятно до слез. Я даже подправил (мне нужно чтобы перед первым ip вставлялось http://) :) :
sed -i 's|\(2[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|[http://\1 \1]|g' 1.txt

Спасибо, результат 100% желаемый :)



"Замена строк по шаблону regexp на тоже+изменения"
Отправлено tos , 15-Май-09 15:50 
Чуть ошибся с одной скобкой:
...
><TD>[http://219.32.246.07 219.32.246.07]<br/>[http://228.34.67.45 228.34.67.45]</TD>

...