2012-06-21 3 views
1

Мне нужно изменить существующий скрипт, который использует SED для поиска и замены в файле. Моя проблема заключается в том, что мне нужно использовать sed для выполнения одного и того же поиска и замены, но только в случае выполнения двух критериев.Использование SED с 2 критериями поиска

Я использую найти и СЭД, как показано ниже:

find . -name 'search.do*' -exec sed -i "/href/\ 
s/href=\"[^\"]*sommerhus\/detail\.do[^\"]*unitId=\([^\"]*\)\"/href=\"sommerhus-\1.html\"/g" {} \; 

, но теперь мне нужно, чтобы убедиться, что замена происходит только тогда, когда «HREF» И еще критерии поиска выполняется Fx «HREF» & & " язык "

Я пробовал с -e, но безуспешно. Возможно ли это?

ответ

4

Вы можете использовать /href.*language\|language.*href/ (возможно, с некоторыми дополнительными ограничениями, например, перед вторым словом в каждом матче).

Вы можете также гнездо команды в блоках:

sed '/href/{ /language/s/<match>/<replace>/ }' 

Это более расширяемой: добавление третьего шаблона только требует добавления в одной паре скобок и шаблон, в то время как выше решение Чередование требует 6 шаблонов в всего (по одному для каждого возможного порядка).


Кроме того, для того, чтобы сохранить обратную косую черту в / внутри шаблона, СЭД позволяет использовать любой символ в качестве разделителя, например @:

find . -name 'search.do*' -exec sed -i "/href/\ 
[email protected]=\"[^\"]*sommerhus/detail\.do[^\"]*unitId=\([^\"]*\)\"@href=\"sommerhus-\1.html\"@g" {} ;' 

(небольшой выигрыш в этом случае, но приятно знать, что для других ситуаций при обращении с пути к файлам или URL-адреса и т.д.)

+0

сезам о вложенности SearchPatterns в 'sed' хотя использую его с эээ, когда я был молод, спасибо @dbaupp. –

+1

+1: также обратите внимание, что можно избежать некоторой избыточности: 'sed '/ language/{\ @href =" [^ "] * sommerhus/detail \ .do [^"] * unitId = \ ([^ "] * \) "@ s // href =" sommerhus- \ 1.html "/ g}' –

+0

Я использовал простое решение, которое вы предоставили с помощью href. * language. Должен был подумать об этом сам, но спасибо большое. –

Смежные вопросы