Недавно я прошел через тот же процесс, используя тот же скрипт. Я не понимаю, почему в документации они по умолчанию устанавливают сборку под /root
.
В любом случае, вот обновленный скрипт, который я нашел с некоторыми изменениями, позволяющими вам указывать директории сборки и бинарных файлов...
https://github.com/benbradley/bashbits/blob/master/ffmpeg_build_el.sh
Он будет собирать под /usr/local/src/
и помещать полученные двоичные файлы в /usr/local/bin
Я также сделал следующее, чтобы сделать libmp3lame.so
доступным перед сборкой ffmpeg...
cd /usr/local/src
# wget lame source
tar -xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make && make install
ldconfig /usr/local/lib
Perl приходит на помощь:
perl -i~ -0777 -pe 's/text = "[^"]+"/text = ""/g' input-file
-i ~
редактирует файл «на месте», оставляя резервную копию -0777
читает весь файл сразу, а не построчно Подстановка s ///
работает так же, как и в sed (т.е. соответствует text = "
, за которым следует что-нибудь но двойные кавычки много раз вплоть до двойных кавычек), но в этом случае это работает для всего файла.
Вы должны проверить пространство шаблонов и продолжать вытягивать строку N
ext, если она не совпадает, например
sed '/text = "/{ # if line matches text = "
:b # label b
$!N # pull in the next line (if not the last one)
/"$/!bb # if pattern space doesn't end with " go to label b
s/".*"/""/ # else remove everything between the quotes
}' infile
с gnu sed
вы можете записать его как
sed '/text = "/{:b;$!N;/"$/!bb;s/".*"/""/}' infile
Это не очень эффективно, лучше просто выберите диапазон / text = "/, /" /
, измените первый строку и удалите остальную часть:
sed '/text = "/,/"/{ # in this range
/text = "/!d # delete all lines not matching text = "
s/\\/"/ # replace the backslash with quotes (this is only
}' infile # executed if the previous d wasn't executed)
снова, с gnu sed
вы можете записать ее как однострочную:
sed '/text = "/,/"/{/text = "/!d;s/\\/"/}' infile
Лично я бы сделал это на Perl. Если мы можем предположить, что нет «
перед закрытием »
, вы можете сделать:
perl -0pe 's/(text\s*=\s*)".*?"/$1""/s' file
-0
проглатывает весь файл, считывая его в объем памяти. -p
означает «печатать каждую строку (здесь« строкой »будет весь файл) после применения сценария, заданного параметром -e
». Сам сценарий представляет собой простой оператор подстановки. Он захватит строку текст
, за которой следует 0 или более пробелов, =
и 0 или более пробелов снова ( текст \ s * = \ s *
) и сохраните его как $ 1
. Затем он заменит захваченный шаблон, а также самую короткую строку в кавычках, которую он найдет, на шаблон ( $ 1
) и ""
. Флаг s
составляет .
соответствует новым строкам.