удалите только первую пустую строку sed

Я собираюсь принять (очень опасный, я знаю), что Вы заканчиваетесь пространство на своем основном разделе и добавили новый диск.

/dev/sda1 / загружают/dev/sda2//dev/sdb1 / var

Принятие, которое Вы скопировали по / папке var на sda2 к разделу на sdb1, можно смонтировать sda2 во второй раз:

mount /dev/sda2 /root/tmp
cd /root/tmp/var
rm -rf *

Вы находитесь теперь в старом '/var' каталог, можно проверить создание файла, это не будет находиться под / var, но это будет там находиться под/root/tmp/var

Теперь можно безопасно удалить файлы onder/root/tmp/var и umount tmp.

Отказ от ответственности: Никакая гарантия, используйте на Ваш собственный риск, не доверяйте мне (или кто-либо еще в Интернете) берут резервные копии!

3
11.05.2013, 15:12
2 ответа

Посмотрите sed FAQ здесь:

$ sed '0,/^$/{//d}' lines
a
b

c

d

Обратите внимание, что это только удаляет действительно пустые строки, если бы Вы хотите рассмотреть строки с пробелом, Вы использовали бы

$ sed '0,/^[[:space:]]*$/{//d}' lines

вместо этого.

4
27.01.2020, 21:14
  • 1
    Это не стандартно sed синтаксис все же. –  Stéphane Chazelas 11.05.2013, 17:11
  • 2
    @Stephane состояния канала несколько не-GNU sed альтернативы, все же. –  Adrian Frühwirth 11.05.2013, 17:13

Можно использовать sed читать до первой пустой строки и затем использовать cat для чтения остальных, которые были бы самыми эффективными для больших файлов:

{ sed -n '/./!q;p'; cat; } < the-file

Это только работает с регулярными файлами хотя (не с каналами, потому что sed считывает данные блоками и не может искать назад на строку после той где q был назван, если вход не seekable). Как отмечено @peterph, С GNU sed версия 4.2.2 и выше, можно добавить -u флаг, который вызывает GNU sed считать его вход один байт за один раз (и произвести одну строку за один раз) и удаляют проблему с каналами (хотя ухудшающаяся производительность).

2
27.01.2020, 21:14
  • 1
    GNU sed (по крайней мере), имеет -u опция, которая должна уменьшить буферизацию. –  peterph 13.05.2013, 12:44
  • 2
    @peterph, с -u, GNU sed все еще считает данные блоками (4k согласно strace с sed 4.2.1, eglibc 2.13, Linux amd64), таким образом, это не поможет здесь. Я разъяснил то, что я подразумевал под буферизацией. –  Stéphane Chazelas 13.05.2013, 13:56
  • 3
    GNU sed 4.2.2 делает 1B, читают здесь в cat file | sed -u. –  peterph 13.05.2013, 14:19
  • 4
    @peterph, Действительно, это - новая опция, добавленная в 4.2.2 (см., что фиксация регистрируется), временный файл $ –  Stéphane Chazelas 13.05.2013, 16:01

Теги

Похожие вопросы