Разные заметки

четверг, 20 мая 2010 г.

Использование комманд diff и patch

$diff file1 /new/file2

77d76 - удалит строку 77 в файле file1 чтобы получить аналог file2

186c186
< { prn2f("\tDump ERROR!\n");}
---
> { prn2f("Dump ERROR!\n");}

замена 186 строки file1 (< { prn2f("\tDump ERROR!\n");})
на 186 строку file2 (> { prn2f("Dump ERROR!\n");})

Когда используется "c", номера строк слева - это строки в оригинальном файле, которые надо заменить строками, находящимися в патче, а номера строк справа - это строки, которые должны быть в пропатченном файле.

Когда используется "a", номер слева может быть только номером одной строки, который показывает, где надо добавить строку в пропатченном файле, а номера строк справа - это строки, которые должны быть в пропатченном файле.

Когда используется "d", номера строк слева - это строки, которые надо удалить, чтобы получить пропатченную версию файла, а номер строки справа может быть только номером одной строки, который показывает где будут строки в пропатченном файле, если они не будут удалены.


Знак "<" означает, что патч должен удалить символы после этого знака, а знак ">" означает, что символы после этого знака надо добавить. Когда надо заменить строки ("c" между номерами строк), вы увидите оба знака: и "<", и ">". Когда надо добавить строку ("a" между номерами строк), вы увидите только знак ">", а когда надо удалить строку ("d" между номерами строк), вы увидите только знак "<". Строка "\ No newline at end of file" появилась из-за того, что я не не нажал enter после того как набрал слова. Считается хорошим тоном заканчивать текстовый файл пустой строкой. Некоторым программам она необходима для работы.


$ diff file1 /new/file2 > patch.now

И затем применить патч:
$ patch file1 -i patch.now -o file1.patching



Если все прошло хорошо, должен получиться файл, идентичный обновленному. Вы можете убедиться в этом, используя команду diff с опцией "-s":
 $ diff -s file1.patching /new/file2 
Файлы file1.patching и /new/file2 идентичны 

Оригинал http://www.ylsoftware.com/news/243

среда, 19 мая 2010 г.

BASH замена символов в файле

Для замены "a" на "A" (только первые встречающиеся буквы в строке):
$ sed 's/a/A/' имя файла

и с сохранением результата
$ sed 's/a/A/' имя файла > имя файла2

Для замены "a" на "A" (весь текст):
$ sed 's/a/A/g' имя файла

и с сохранением результата
$ sed 's/a/A/g' имя файла > имя файла2

вторник, 18 мая 2010 г.

Perl перенаправление ввода-вывода

#!/usr/bin/perl
### ПЕРЕМЕННЫЕ
$log="log.log";
$out="out.dat";
$err="err.dat";
###
#system ("rm $out $log $err");
 

### Сохраняем стандартный вывод и вывод ошибок
open(SAVEOUT, ">&STDOUT");
open(SAVEERR, ">&STDERR");
 

### Открываем файл для записи
open (LOG,"> $log") or die "do not open $log!!!\n";
 
### Процедура вывода в файл
sub prn2f {
        $param =$_[0];
        select (LOG); $|=1;
        print $param;
}
 
### Процедура вывода в изначальный STDOUT
sub prn2std {
        $param =$_[0];
        select (SAVEOUT); $|=1;
        print $param;
        select (LOG); $|=1;
}
 
### Процедура вывода в изначальный STDERR
sub prn2err {
        $param =$_[0];
        select (STDERR); $|=1;
        print $param;
        select (LOG); $|=1;
}
### Перенаправляем STDOUT и STDERR в файлы
sub std2file {
        open (STDOUT, "> $out") or die "do not forward STDOUT to $out...\n";
        open (STDERR, "> $err") or die "do not forward STDERR to $err....\n";
        select(STDERR); $| = 1; # отключаем буферизацию
        select(STDOUT); $| = 1; # отключаем буферизацию


### Восстанавливаем вывод
sub std2std {
        open(STDOUT, ">&SAVEOUT");
        open(STDERR, ">&SAVEERR");
}


### НАЧАЛО   ПРИМЕРА
prn2std ("Вывод в стандартную консоль\n");
prn2f ("Вывод в файл\n");
prn2err("Вывод в поток ошибок\n");

std2file();
prn2std ("Вывод в стандартную консоль\n");
prn2f ("Вывод в файл\n");
prn2err("Вывод в поток ошибок\n");

std2std();

### КОНЕЦ
__END__