2016-08-09 3 views
-2

У меня есть много файлов, которые имеют линии, которые следующим образом:Заменить а> с "SED регулярным выражением

#include "3rd-party/*lots folders*> 

проблема заключается в том, что она заканчивается > вместо "

Есть быстрое регулярное выражение для СЭД, чтобы изменить это?

в основном, если строка начинается с #include "3rd-party, он должен заменить последний символ ".

Заранее спасибо

ответ

2

В принципе вы можете использовать:

sed '/^[[:space:]]*#include "3rd-party/s/>[[:space:]]*$/"/' file 

Объяснение:

  • /^[[:space:]]*#include/ является адрес, постоянный адрес выражения. Следующая команда будет применяться к строкам, которые запускают дополнительное пространство, за которым следует оператор #include.
  • s/>[[:space:]]*$/"/ заменяет >, а затем дополнительное пространство и конец строки на ".

Используйте опцию -i, если вы хотите изменить файл вместо:

sed -i '/^[[:space:]]*#include/s/>[[:space:]]*$/"/' file 

На связке, скажем C файлы, использовать find и это -exec вариант:

find . -name '*.c' -exec sed -i '/^[[:space:]]*#include/s/[[:space:]]*$/"/' {} \; 
3

Вы можете использовать th является:

sed -i '' '/^[[:blank:]]*#include "3rd-party/s/>$/"/' file 

#include "3rd-party/*lots folders*" 
+0

'[[: blank:]]' не является символьным классом, который понимается 'sed'. – hek2mgl

+3

Неправильно, я тестировал его с OSX 'sed' и' gnu sed', и это сработало. – anubhava

+0

Тогда это скрытая «функция». После man-страницы это должно быть '[[: space:]]' – hek2mgl

0

Вы можете использовать sed для поиска шаблона и делает действие на этой линии, как

sed '/search_pattern/{action}' your_file 

действие, которое вы хотите сделать, это заменить последний cahracter в соответствии с >$ где > - ваш желаемый символ, а $ означает, что искомый символ должен быть помещен в конец строки.

Действие для этого является командой seds///, которая работает как s/search_pattern/replace_pattern/.

Это выглядит для вашей цели, как:

sed '/#include "3rd-party/{s/>$/"/}' your_file 

Но поскольку sed является (s) Tream (ред) itor вы должны использовать команду флаг СЕПГА -i, чтобы внести изменения в линии или конвейер с > в новый файл.

Как это

sed -i '/#include "3rd-party/{s/>$/"/}' your_file 

или как этот

sed '/#include "3rd-party/{s/>$/"/}' your_file > new_file 

Пожалуйста, дайте мне знать, если это делает вашу работу.

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