2013-03-18 2 views
0

Мне нужно найти и заменить определенный текст во многих файлах. Я пытаюсь использовать sed для замены. Вот что я пытаюсь сделать:sed find replace (заменить на место) с помощью regex

Поиск:

<font size="4" face="verdana, arial,geneva"><b>([^<]*)</b></font> 

заменить:

<font size="4" face="verdana, arial,geneva"><b><title>$1</title></b></font> 

Esentially Я хочу добавить <title></title> тег вокруг того, что я когда-либо найти.

например. если текст как:

<font size="4" face="verdana, arial,geneva"><b>THIS IS MY TITLE</b></font> 

Я хочу, чтобы заменить его:

<font size="4" face="verdana, arial,geneva"><b><title>THIS IS MY TITLE</title></b></font> 

Я попытался различные команды, но это не похоже на работу. Здесь Ааре команды, которые я пытался до сих пор:

sed -e 's/<font size="4" face="verdana, arial,geneva"><b>\([^<]*\)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g' 
sed -r 's/<font size="4" face="verdana, arial,geneva"><b>([^<]*)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g' 
sed -E 's/<font size="4" face="verdana, arial,geneva"><b>([^<]*)<\/b><\/font>/<font size="4" face="verdana, arial,geneva"><b><title>\1<\/title><\/b><\/font>/g' 

ответ

0

Для меня это работает

sed '/font *size *= *"4" *face/s|<b>\([^<]*\)</b>|<b><title>\1</title></b>|g' 

моя идея состоит в том, чтобы избежать как можно больше побегов, как можно и нарушить соответствие и замену в два этапа

+0

это изменит все '<шрифт size = ..> 'не только для этих атрибутов' 'face' :) – Kent

+0

Правда, Кент! Спасибо за комментарий. Я исправил сообщение. В любом случае вы можете просто увеличить соответствие, чтобы убедиться, что вы просто отредактируете строки, которые вам подходят – jpmuc

+0

, поэтому я просто сделал «скопировать и вставить». так как я не мог «убедиться». но вы правы, человек всегда может проверить, а затем немного изменить и снова проверить. :) – Kent

0

СЭД линия была в основном построена из копии & пасты^_ ^. пожалуйста, попробуйте:

kent$ (master|✔) echo '<font size="4" face="verdana, arial,geneva"><b>THIS IS MY TITLE</b></font>'|sed -r '[email protected](<font size="4" face="verdana, arial,geneva"><b>)([^<]*)(</b></font>)@\1<title>\2</title>\[email protected]' 
<font size="4" face="verdana, arial,geneva"><b><title>THIS IS MY TITLE</title></b></font>