Обычно некоторые блоки резервируются для root, и они не учитываются как "доступные" в выводе df. Если ваша файловая система имеет 5% зарезервированных блоков и занимает 861 ГБ, то осталось 95%, или около 817 ГБ, что соответствует тому, что вы видите.
Этот вопрос U+L может быть уместен: Зарезервированное место для root в файловой системе - зачем?
Вы можете использовать эту команду sed
sed '/,/{N;s/\n//;s/$//;}' myfile.txt
tr
одновременно просматривает только один символ, поэтому она не работает, когда вам нужно проверить контекст.
Поскольку разделы разделены пустыми строками, режим абзацев awk
отлично подходит:
awk -vRS= '{gsub(/\n/, ""); print $0 "\n"}' myfile.txt
Установка RS
пустыми загружает «записи», разделенные пустыми строками, и для каждого record мы снова удаляем символы новой строки, а затем печатаем запись с дополнительной новой строкой.
То же самое и в Perl, но с двумя дополнительными символами новой строки здесь, потому что Perl действительно загружает последний символ новой строки, как любой другой символ:
perl -00ne 's/\n//g; print "$_\n\n"' myfile.txt
Оба они будут обрабатывать несколько пустых строк так же, как одну.
Мы могли бы сделать это с помощью sed, но это немного сложнее, чем моя первоначальная попытка, если нам нужно поддерживать блоки из более чем двух строк.
sed -n 'H; $bL; /./d; :L; x; s/\n//g; s/$/\n/; p;' myfile.txt
Добавить текущую строку в буфер хранения ( H
), затем проверить, является ли это последней строкой ( $
), и в этом случае перейти к L ( bL
). Если нет, проверьте, есть ли какие-либо символы ( /./
), и если да, удалите ( d
) строку и вернитесь к началу.
В противном случае (строка пуста) перейдите к L
, где мы меняем местами ( x
) буфер удержания и текущую строку (пространство шаблона), удаляем новые строки ( s / \ n // g
), добавьте еще один в конец ( s / $ / \ n /
) и неявно распечатайте пространство шаблонов, теперь содержащее строки, которые мы собрали с предыдущего пустая строка. Здесь дополнительные пустые строки приведут к появлению дополнительных пустых строк.