Ищем Perl или Sed-liner для замены строки содержимым из другого файла - PullRequest
2 голосов
/ 21 июня 2011

В файле HTML, назовем его index.html, я хочу заменить строку комментария, скажем, //gac goes here, содержимым (многострочным) из отдельного файла, который называется: gac.js. Есть ли для этого хороший однострочник?

Я нашел что-то как: sed -e "/$str/r FileB" -e "/$str/d" FileA, но он не работает, как и обещал.

Мне нравится как можно короче, так как он будет вызван после SVN возврата (я не хочу, чтобы какой-либо из этих google.script загрязнял мою среду разработки).

Ответы [ 4 ]

5 голосов
/ 21 июня 2011

Это должно работать, даже если это неприятно:

perl -pe 'BEGIN{open F,"gac.js";@f=<F>}s#//gac goes here#@f#' index.html

В случае, если gac.js должно быть динамическим:

perl -pe 's#//(\S+) goes here#open+F,"$1.js";join"",<F>#e' index.html
3 голосов
/ 21 июня 2011
perl -mFile::Slurp -pe 's/\/\/(\w+) goes here/@{[File::Slurp::read_file("$1.js")]}/;'

Очевидно, требуется File :: Slurp

1 голос
/ 22 июня 2011

Пройдя man sed, этот учебник и некоторые эксперименты, которые я придумал:

sed -i '\_//gac goes here_ {
    r gac.js
    d 
}' index.html

Что делает именно то, что я хочу. Это не совсем переводчик (если я сделаю одну строку, я получу: sed: -e expression #1, char 0: unmatched '{'), чего я не понимаю. Однако приведенное выше выражение прекрасно вписывается в мой скрипт обновления.

Извлеченные уроки: sed очень мощный, -i ведет себя по-разному в mac os x / linux, / string / может быть легко заменен на \ [other delimiter] string [other delimiter].

1 голос
/ 21 июня 2011

Не очень приятно, но, кажется, работает:

cat index.html | perl -pe 'open(GAC, "gac.js");@gac=<GAC>;$data=join("", @gac); s/gac goes here/$data/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...