sed вставляют в начале нескольких файлов, не работает

find /folder -name '*.php' -type f -print0 |
  perl -0 -lne 'printf "%o %s\n", (lstat $_)[2]&07777, $_'

См. также этот связанный вопрос: Преобразуйте ls-l выходной формат к chmod формату.

-print0 расширение GNU, также поддерживаемое BSDs как OS/X. GNU find также имеет a -printf предикат, который мог отобразить режим, но что каждый не был добавлен к BSD's find.

(Протестированный на OS/X 10.8.4 и Debian 7, но должен работать над любой системой, которая имеет любую версию perl и find -print0 который включает все системы GNU и весь недавний BSDs),

4
23.05.2017, 15:39
3 ответа

для редактирования файла Место с OSX SED , вам нужно установить пустое расширение:

$ sed -i '' '1i\
#encoding:utf-8' filename

, и вам нужна литеральная новая линия после I \ . Это указывается POSIX SED .

Только GNU SED позволяет вставить текст на одной линии с командой.

SED также может работать с несколькими файлами сразу, поэтому вы можете использовать -Exec Command {} + Форма:

$ find . -iname "*.erb" -type f -exec sed -i '' '1i\
#encoding:utf-8' {} +
6
27.01.2020, 20:49

Вот несколько способов делать то, что вы хотите:

  1. SED

     Найти.  «* .erb» -Type F -exec \
      Sed -i '' '1S / ^ / # кодировка: UTF-8 \ n /' {} \;
     

    У меня нет доступа к BSD SED , чтобы проверить, поэтому я не могу гарантировать, что \ N будет читаться правильно. Попробуйте команду в одном файле и без -I сначала, чтобы убедиться.

  2. Perl

     Найти.  «* .erb» -Type F -exec \
      Perl -i -pe 'Print "#encoding: UTF-8 \ n", если $. == 1;'  {} \;
     
  3. Shell

     Найти.  «* .erb» -Type F -exec \
      SH -C 'ECHO "#ENCODING: UTF-8"> TMP && CAT "$ 1" >> TMP && MV TMP "$ 1" SH {} \;
     
1
27.01.2020, 20:49

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

ex -sc '1i|#encoding:utf-8' -cx file
  1. 1 выберите строку 1

  2. i вставьте текст и новой строки

  3. x сохраните и закройте

1
27.01.2020, 20:49

Теги

Похожие вопросы