Если вам не нужно делать это в SED
, Perl может помочь. Он хранит имя файла, который он читает из специальной переменной $ ARGV
и номер строки в специальной переменной $.
, так что это должно работать:
...
for i in $(cat $inlist/list.txt); do
perl -nle 'print "$ARGV ($_)" and last if ($.==2)' "${in}/${i}/${g}"
done
для захвата нескольких строк:
...
for i in $(cat $inlist/list.txt); do
perl -nle '
BEGIN{
@lines = (2,3,5);
print "$ARGV: "
}
print "Line $.: $_" if grep { $. == $_ } @lines;
last if $. == $lines[-1];
' "${in}/${i}/${g}"
done
вышеупомянутое будет печатать линии 2, 3 и 5. Это предполагает, что последняя запись в массиве @Lines
Очень последняя линия, которую вы хотите напечатать.
Либо (дополнительно) экспортируйте этот подкаталог в VirtualBox и смонтируйте его таким же образом, либо смонтируйте главную папку во временную точку монтирования и используйте крепление для монтирования подкаталога в реальное место:
mount -t vboxsf vm_shared /mnt
mount --bind /mnt/subdir ~/shared/
Или вместо mount --bind ...
попробуйте следующее:
ln -s /mnt/subdir ~/shared/