Я только что понял, что у меня та же проблема. Не уверен, почему это произошло, так как я только что исправил, но, похоже, в моем случае это проблема с нехваткой места в разделах моего жесткого диска. При установке linux (kali )я разделил жесткий диск на разделы для каждой отдельной папки, (поэтому /root имел свой собственный раздел, а /usr и т. д. )не рекомендуется. поэтому, чтобы решить эту проблему, я зашел в виртуальную консоль (Режим восстановления )и запустил:
sudo apt -получить автоочистку
sudo apt -получить автоматическое удаление
и это сработало! Надеюсь, это поможет
В Perl вы можете сделать:
#!/usr/bin/env perl
while (<>) {
## split the line into fileds on whitespace
my @fields = split(/\s+/);
## set the 4th field (numbering starts at 0) to "0" if
## this line starts with an R (since that's what you had originally)
$fields[3] = 0 if /^R/;
## join thew fields with a space and print
print join(" ", @fields). "\n";
}
Если вы запустите приведенное выше на своем примере, вы получите:
$ foo.pl file
R5_427 MMP15@2:S VDD:1 0 TC1=0.0004785156
R5_428 MMP15@2:S lninst_M55:S 0
Или, если вы хотите сохранить исходную логику с более сложным регулярным выражением, вы можете сделать:
#!/usr/bin/env perl
open(my $RD, '<', $ARGV[0]);
while(<$RD>)
{
## you want chomp, not chop. chomp only removes trailing newlines
## while chop removes the last character no matter what it is.
## You also don't need the $line variable, perl will default to $_
chomp;
## You don't need to capture every group, only the
## ones you will use later. Also, to allow for only
## three fields, you need '\s*.*' and not '\s+.*'
if (/^(R\S+\s+\S+\s+\S+)\s+\S+(\s*.*)/) {
## No need for a temp variable, just print
print "$1 0 $2\n";
}
else {
print "$_\n";
}
}
Конечно, для этого вам не нужен скрипт, вы можете просто написать один -лайнер:
$ perl -lane '$F[3] = 0 if /^R/; print join(" ", @F)' file
R5_427 MMP15@2:S VDD:1 0 TC1=0.0004785156
R5_428 MMP15@2:S lninst_M55:S 0
Один из способов — пропустить первые 3 поля и заменить четвертое на 0,0 только для резисторов.
$ perl -pe 's/^R(?:\S+\s+){3}\K\S+/0.0/' file
R5_427 MMP15@2:S VDD:1 0.0 TC1=0.0004785156
R5_428 MMP15@2:S lninst_M55:S 0.0