2015-02-15 2 views
1

Я хочу заменить несколько блоков файлов js на мини-версию с помощью команды perl.Perl заменить не работает как ожидалось

Когда я тестировал его на веб-сайте, он работает , но когда я запускаю в командной строке, это не так.

echo '<!doctype html> 
    <html> 
    <head> 
     <script src="lib/angular.js"></script> 
     <!-- build:js ../ute.min.js --> 
     <script src="app/app.js"></script> 
     <script src="app/services/uteEndpoint.js"></script> 
     <!-- endbuild:js -->' | perl -pe 's/<!-- build:js ([^ ]+) -->[^\!]+<!-- endbuild:js -->/<script src="$1"><\/script>/gm' 

Что я делаю неправильно в командной строке?

я испытал здесь, http://www.regexe.com/, и мой ожидается выход

<!doctype html> 
<html> 
<head> 
    <script src="lib/angular.js"></script> 
    <script src="../ute.min.js"></script> 

ответ

4

По умолчанию Perl обрабатывает входную строку. Поскольку вы работаете с несколькими строками, вам нужно включить режим абзаца.

perl -00pe 's~<!-- build:js ([^ ]+) -->[^\!]+<!-- endbuild:js -->~<script src="$1"></script>~gm' 

ИЛИ

perl -0777pe 's~<!-- build:js ([^ ]+) -->[^\!]+<!-- endbuild:js -->~<script src="$1"></script>~gm' 

Пример:

$ echo '<!doctype html> 
>  <html> 
>  <head> 
>  <script src="lib/angular.js"></script> 
>  <!-- build:js ../ute.min.js --> 
>  <script src="app/app.js"></script> 
>  <script src="app/services/uteEndpoint.js"></script> 
>  <!-- endbuild:js -->' | perl -0777pe 's/<!-- build:js ([^ ]+) -->[^\!]+<!-- endbuild:js -->/<script src="$1"><\/script>/gm' 
<!doctype html> 
    <html> 
    <head> 
     <script src="lib/angular.js"></script> 
     <script src="../ute.min.js"></script> 
+1

Спасибо, мне нужно узнать, какой режим хлебать это. обучение никогда не заканчивается :) – allenhwkim

+1

'-00' - режим абзаца, он просто работает по совпадению, потому что вход не имеет двух последовательных строк. Для получения дополнительной информации см. 'Perldoc -v '$ /" '. – TLP

+0

да, вот что я сказал. Perl разбивает входные данные в соответствии с двумя символами новой строки. Я думаю, что термин slurp здесь неправильный. Так что я добавил '-0777pe' –

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