Похоже, вы пытаетесь скомпилировать модуль ядра Linux на FreeBSD.
Хотя и Linux, и FreeBSD являются Unix -подобными операционными системами, они используют ядра, которые во многих аспектах полностью отличаются друг от друга. Это означает, что фрагмент кода ядра (или модуль ядра, например ), написанный специально для ядра Linux, не будет компилироваться и/или работать в системе FreeBSD.
Именно в таких ситуациях кто-то со знанием ядра FreeBSD и его архитектуры и, по крайней мере, с общим знанием ядра Linux, может подумать о том, чтобы сесть на порт драйвера из Linux во FreeBSD.. Это включает в себя преобразование основной работы драйвера во что-то, что соответствовало бы тому, как ядро FreeBSD делало бы аналогичные вещи.
Это предприятие, которое потребует времени и знаний.
Поскольку я не знаком с драйвером или с FreeBSD в большей степени, я, к сожалению, не могу сказать, поддерживаются ли устройства, которые поддерживает драйвер, FreeBSD.
Даны два файла с именами "старые"...
$ cat old
old1
old2
old3
и «новый»
$ cat new
new1
new2
new3
Вы можете создать файл сценария для sed следующим образом:
$ paste old new | while read old new; do printf "s/%s/%s/g\n" "$old" "$new"; done |tee sedfile
s/old1/new1/g
s/old2/new2/g
s/old3/new3/g
И используйте этот файл с sed:
sed -f sedfile mulipath.conf > review-this.conf
$ perl -e '
open(F1,"<",shift);
open(F2,"<",shift);
while(<F1>) {
chomp; # strip trailing \n from input file.
$new=<F2>;
chomp $new;
print "s/$_/$new/g\n"
}' file1.txt file2.txt
s/360002ac000000000000001f20001add7/60002ac000000000000001f20001accb/g
s/360002ac000000000000001f20001add8/60002ac000000000000001f20001accc/g
s/360002ac000000000000001f20001add9/60002ac000000000000001f20001accd/g
s/360002ac000000000000001f20001ade0/60002ac000000000000001f20001acce/g
Это могло быть (и было написано как )в один -лайнер, я добавил перевод строки, чтобы сделать его более читаемым.
Если file1.txt
не имеет того же количества строк, что и file2.txt
, этот скрипт выдаст ложный вывод для любых строк в одном файле, которым нет соответствующей строки в другом. Так что не делай этого.
Чтобы применить эти изменения к вашему multipath.conf
файлу, запустите приведенный выше лайнер perl one -и перенаправьте вывод в файл (, например. sedscript.sed
), а затем запустите:
sed -f sedscript.sed multipath.conf
Убедитесь, что сгенерированный sed
скрипт делает то, что вы хотите, а затем либо перенаправьте вывод в новый файл, либо используйте параметр sed
-i
для редактирования «в -месте» multipath.conf
. Конечно, сначала сделайте резервную копию и скопируйте ее в безопасное место вне досягаемости-i
(или даже-i.bak
).
примеры входных файлов::
$ cat file1.txt
360002ac000000000000001f20001add7
360002ac000000000000001f20001add8
360002ac000000000000001f20001add9
360002ac000000000000001f20001ade0
$ cat file2.txt
60002ac000000000000001f20001accb
60002ac000000000000001f20001accc
60002ac000000000000001f20001accd
60002ac000000000000001f20001acce
Кстати, приложив немного больше усилий, этот лайнер perl one -можно было бы заставить читать в файле1 и файле2, создавать массив операций s/old/new/g, а затем применять их к третьему файлу (, например multipath.conf)
Например:
#!/usr/bin/perl
# run with three arguments:
# $1 = file containing old patterns
# $2 = file containing replacements
# $3 = file to modify
# THIS SCRIPT IS A CRUDE, MINIMALIST EXAMPLE AND CONTAINS NO ERROR
# CHECKING/HANDLING CODE AT ALL. USE AT OWN RISK.
use strict;
use File::Slurp;
# hash to store the search patterns and their replacements.
my %regex=();
open(F1,"<",shift);
open(F2,"<",shift);
while(<F1>) {
chomp; # strip trailing \n from input file.
my $new=<F2>;
chomp $new;
# qr// pre-compiles the regular expression, so it doesn't have to be
# compiled on every pass through the loop.
$regex{qr/$_/} = $new;
};
close(F1);
close(F2);
my $f3=shift;
my @file3=read_file($f3);
# transform and overwrite the third file.
open(F3,">",$f3);
foreach (@file3) {
foreach my $key (keys %regex) {
s/$key/$regex{$key}/g;
}
print F3;
};
close(F3);