Perl -pi -e не может заменить строки звездочкой - возможно, я не экранирую должным образом - PullRequest
0 голосов
/ 30 сентября 2018

Я безуспешно использовал perl pie, упомянутый в SO .Что я делаю не так:

 * It is generally better to create a new file per style scope.
 *
 *= require_tree .
 *= require_self

Я хочу, чтобы файл в итоге выглядел следующим образом после выполнения perl pie

 * It is generally better to create a new file per style scope.
 *
 *= require iziToast
 *= require_tree .
 *= require_self

Я потратил один час на глупые попытки, подобные этой:

  828  perl -pi -e 's/  *= require_tree ./  *= Require_tree ./' app/assets/stylesheets/application.css.scss
  832  perl -pi -e 's/require_tree \./Require_tree \./' app/assets/stylesheets/application.css.scss
  837  perl -pi -e 's/  \*\= require_tree \./  \*\= Require_tree \./' app/assets/stylesheets/application.css.scss
  839  perl -pi -e 's/= require_tree \./= Require_tree \./'       864  perl -pi -e 's/\*/\Q*/' app/assets/stylesheets/application.css.scss
  868  perl -pi -e 's/\*/\Q*/' app/assets/stylesheets/application.css.scss
  874  perl -pi -e 's/\*/*/' app/assets/stylesheets/application.css.scss
  876  perl -pi -e 's/\*/\*/' app/assets/stylesheets/application.css.scss
  878  perl -pi -e 's/\*/s/' app/assets/stylesheets/application.css.scss
  898  git checkout app/; perl -pi -e 's/\(\*\)/$1/' app/assets/stylesheets/application.css.scss; git diff
  900  git checkout app/; perl -pi -e 's/(*)/$1/' app/assets/stylesheets/application.css.scss; git diff
  901  git checkout app/; perl -pi -e 's/(\*)/$1/' app/assets/stylesheets/application.css.scss; git diff
  903  git checkout app/; perl -pi -e 's/(\\*)/$1/' app/assets/stylesheets/application.css.scss; git diff
  905  git checkout app/; perl -pi -e 's/\(\*\)/$1/' app/assets/stylesheets/application.css.scss; git diff
  907  git checkout app/; perl -pi -e 's/^(.*)/foo/' app/assets/stylesheets/application.css.scss; git diff
  908  git checkout app/; perl -pi -e 's/^  (.*)/foo/' app/assets/stylesheets/application.css.scss; git diff
  924  git checkout app/; perl -pi -e 's/^(.*)/\1/' app/assets/stylesheets/application.css.scss; git diff
  925  git checkout app/; perl -pi -e 's/^(.*)/\\1/' app/assets/stylesheets/application.css.scss; git diff

Система: Mac 10.13.5, bash 3.2, perl 5.18

Примечания: Подход на основе номера строки не идеален для меня, потому что номера строк не очень перспективны
Посколькузаголовок вопроса упоминает perl, ищет perl-ответ.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

* и . специально для шаблонов регулярных выражений.Вы должны использовать \* и \. для соответствия * и ..

perl -i -pe'print " *= require iziToast\n" if /^ \*= require_tree \.$/' file

или

perl -i -pe's/^(?= \*= require_tree \.$)/ *= require iziToast\n/' file
0 голосов
/ 30 сентября 2018

Я бы даже не использовал Perl для этого;Вы можете просто использовать sed.

$ sed '3i\
> \ *= require iziToast
> ' tmp.txt
 * It is generally better to create a new file per style scope.
 *
 *= require iziToast
 *= require_tree .
 *= require_self
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...