Как я могу добавить тег к началу нескольких файлов?

Мне нужно добавить теги PHP, окружающие файл. Их легко добавить, используя

find . -exec echo "?>" >> '{}' \;

, но как я могу добавить тег <?php?

16 голосов | спросил user2362 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 13:33:03 +0400 2009, 13:33:03

7 ответов


17
sed -i "1s/^/<?php /" file

(-i предназначен для редактирования на месте.)

Более портативная версия:

ed file <<!
1s/^/<?php /
wq
!
ответил grawity 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 14:18:47 +0400 2009, 14:18:47
5

Вы можете использовать такой фильтр AWK,

awk '{if (NR == 1) printf "% s% s", "PREFIX", $ 0; else print $ 0} 'testfile> новый файл

Где PREFIX - ваша префиксная строка php.

ответил nik 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 14:19:16 +0400 2009, 14:19:16
5

Я еще не могу оставить комментарий, но сделать все за один шаг:

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
ответил 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 17:49:32 +0400 2009, 17:49:32
5

Вы можете сделать это с помощью однострочного perl:

perl -0777 -p -i -e "s/^/hey /g" testfile

-0777 заставляет режим слияния файлов, поэтому весь файл читается как одна строка. -p разрешает цикл. -i позволяет редактировать файл на месте. ^ указывает начало строки.

$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf

Обновление: Как указано в комментариях, вы можете выбрать автоматическое создание резервной копии с помощью -i.bak вместо -i. Это обеспечивает дополнительную безопасность в случае ошибок в вашей команде. Аргумент -i становится суффиксом резервного копирования.

При обновлении набора файлов вы можете запустить команду с помощью -i.backup${RANDOM}, проверить, что все файлы обновлены правильно, а затем удалить все файлы с этим расширением.

ответил nagul 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 13:58:27 +0400 2009, 13:58:27
3

sed предназначен для редактирования потоков - файл не является потоком. Используйте программу, предназначенную для этой цели, например ed или ex. Опция -i для sed не только не переносимый, он также сломает любые символические ссылки, с которыми вы можете столкнуться, поскольку он по существу удаляет его и воссоздает, что бессмысленно.

for file in foo bar baz; do
    ed -s "${file}" << EOF
0a
<?php 
.
w
EOF
done
ответил Chris Down 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 18 Sep 2011 02:44:05 +0400 2011, 02:44:05
0

Альтернатива тому, что вы написали для добавления чего-либо к концу каждого файла в каталоге (в bash):

for FNAME in *
do
    echo "?>" >> $FNAME
done

, хотя мне нравится ваш find однострочный:)

ответил warren 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 06 Sep 2009 18:10:13 +0400 2009, 18:10:13
0

Существует простой способ

echo "startstr$(cat filename)endstring" > filename.new
ответил Hogan 19 J0000006Europe/Moscow 2013, 18:44:47

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132