Другой, очень прагматическая причина, для предпочтения состава по наследованию имеет отношение модели предметной области и отображению его к реляционной базе данных. Действительно трудно отобразить наследование на модель SQL (Вы заканчиваете со всеми видами hacky обходных решений, как создание столбцов, которые не всегда используются, с помощью представлений, и т.д.). Некоторые ORMLs пытаются иметь дело с этим, но это всегда сложно быстро. Состав может быть легко смоделирован через отношения внешнего ключа между двумя таблицами, но наследование намного более трудно.
Если ваша версия sed позволяет использовать -i.bak
] flag (редактировать на месте):
sed -i.bak '/line of text/d' *
Если нет, просто поместите его в цикл bash:
for file in *.txt
do
sed '/line of text/d' "$file" > "$file".new_file.txt
done
Consider grep -v:
for thefile in *.txt ; do
grep -v "text to remove" $thefile > $thefile.$$.tmp
mv $thefile.$$.tmp $thefile
done
Grep -v shows all lines except those that match, they go into a temp file, and then the tmpfile is moved back to the old file name.
perl -ni -e 'print if not /mystring/' *
Это указывает Perl перебирать ваш файл (-n), редактировать на месте (-i) и печатать строку, если она не соответствует вашему регулярному выражению.
В некоторой степени связано, вот удобный способ выполнить замену в нескольких файлах.
perl -pi -e 's/something/other/' *
Для этого я написал сценарий Perl:
#!/usr/bin/perl
use IO::Handle;
my $pat = shift(@ARGV) or
die("Usage: $0 pattern files\n");
die("Usage $0 pattern files\n")
unless @ARGV;
foreach my $file (@ARGV) {
my $io = new IO::Handle;
open($io, $file) or
die("Cannot read $file: $!\n");
my @file = <$io>;
close($io);
foreach my $line (@file) {
if($line =~ /$pat/o) {
$line = '';
$found = 1;
last;
}
}
if($found) {
open($io, ">$file") or
die("Cannot write $file: $!\n");
print $io @file;
close($io);
}
}
Обратите внимание, что он удаляет строки на основе регулярного выражения. Если вы хотите добиться точного соответствия, внутренний foreach
будет выглядеть так:
foreach $line (@file) {
chomp $line;
if($line eq $pat) {
$line = '';
$found = 1;
last;
}
}