2015-08-04 2 views
0

У меня проблема при замене функции ниже на макрос.Замена с игнорированием нескольких символов с использованием SED

оригинальная линия:

function("<message>); 

требуется линия:

`macro("message") 

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

grep -rl 'function' ./ | xargs sed -i 's/function/`macro/g' 

Это решило половину моей проблемы. я заменил переднюю часть перед сообщением. Я застрял, заменяя точку с запятой.

Примечание: другие точки с запятой не должны быть нарушены.

+0

вы можете показать некоторые примеры примеров о том, как может быть 'message' текст? может ли он иметь пробелы? Обратите также внимание, что у вас есть ведущая, а также ваша функция «функция» не содержит закрывающей двойной кавычки. Должно быть так? – fedorqui

+1

Для вашего точного вывода вы можете использовать 'sed 's/function (" <\([^>] * \)>. */\ 'Macro (" \ 1 ") /'' – 123

ответ

0

Используйте обратную ссылку, чтобы сделать все обновление:

grep -rl 'function' ./ | \ 
    xargs sed -i 's/function("<\(.*\)>);/`macro("\1")/g' 
+0

Получил мою ошибку. Все о совпадении. Теперь он работает нормально. – Yaswanth

0

дать этому попытку:

grep -rl 'function' ./ | xargs sed -i '/function/{s/function/`macro/g;s/;\s*$//}' 
+0

'Примечание: другие точки с запятой не должны быть нарушены.'. Почему бы не создать полное регулярное выражение для строк 'function'? – fedorqui

+0

Я не читал эту строку ... вы правы, тогда функция' function' должна быть проверена как шаблон. – Kent

+0

Да, вы также можете сказать 'find .exex sed ... {} \; ', нет необходимости в' grep -r'. – fedorqui

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