cdn-fastly.deb.debian.org
и deb.debian.org
являются частью одной и той же службы , но это не одно и то же. Последний служит двум целям:его записи DNS содержат записи SRV, которые позволяют apt
находить зеркала (начиная с Stretch ), и на нем размещен веб-сервер, который будет перенаправлять apt
на соответствующий хост если необходимо. Первый — это CDN Fastly для зеркальной сети Debian. Конечный результат использования любого из них в sources.list
одинаков; использование deb.debian.org
требует дополнительного шага, но, возможно, является более надежным -доказательством в будущем.
Эта конкретная услуга спонсируется Fastly и Amazon CloudFront. Все зеркала Debian так или иначе спонсируются; список спонсоров общедоступен . Все службы debian.org
являются официальными службами Debian.
perl -i -p0e 's/`cat before.txt`/`cat after.txt`/se' text.txt
Здесь у вас есть обратные кавычки внутри одинарных -кавычек, поэтому они не обрабатываются оболочкой, но Perl видит их как -. Тогда снова,Perl также поддерживает обратные апострофы как форму цитирования, но это не работает внутри s///
.
Наличие многострочного шаблона -не является проблемой, если вы используете -0
или -0777
в командной строке Perl.(-0
будет иметь отдельные строки с символом NUL, которого не будет в текстовом файле, а -0777
будет читать весь файл за один раз.)
Вы могли бы сделать это с помощью двойных -кавычек, но это расширило бы содержимое файлов непосредственно в сценарии Perl, а любые специальные символы были бы восприняты как часть сценария. Одна косая черта заканчивала бы оператор s///
и вызывала проблемы.
Вместо этого попросите Perl прочитать файлы:
perl -i -0 -pe '$b = `cat before.txt`; $a = `cat after.txt`; s/$b/$a/s' text.txt
Здесь содержимое before.txt
по-прежнему будет восприниматься как регулярное выражение. Если вы хотите остановить это, используйте вместо этого s/\Q$b\E/$a/s
.
Я не думаю, что вы хотите, чтобы флаг e
был равен s///
, это сделало бы замену воспринятой как выражение Perl (, что опять же действительно имеет значение только в том случае, если у вас есть оболочка, расширяющая содержимое файла до Командная строка Perl ).
В вашем более позднем примере у вас есть some text.\n
в text.txt
и text\n
в before.txt
, где \n
представляет новую строку, как обычно. Когда файлы загружаются в Perl, они воспринимаются как -, поэтому считается последняя новая строка в before.txt
. В другом файле есть точка перед новой строкой, в другом нет, поэтому они не совпадают.
Вы можете удалить возможный символ новой строки в конце с помощью Вы можете удалить возможный завершающий символ новой строки, например, с помощью.chomp $b;
после загрузки файлов. $b =~ s/\n$//;
:
$ perl -0 -pe '$b = `cat before.txt`; $a = `cat after.txt`; $b =~ s/\n$//; $a =~ s/\n$//; s/$b/$a/s' text.txt
Here is
some whatever.
Обратные кавычки внутри одинарных кавычек будут восприниматься буквально. Вы должны иметь возможность заменить их двойными кавычками в приведенном вами примере.
Также обратные кавычки не -предпочтительны по нескольким причинам, поэтому здесь я изменил их на$( )
perl -i -p0e "s/$(cat before.txt)/$(cat after.txt)/se" text.txt
NB :Я просто решаю вашу проблему с цитированием, я не даю обещаний, что ваша команда сделает то, что вы намереваетесь.