как удалить пробелы между строками с помощью команды вырезания

Я рекомендую использовать дублирование (, но я не тестировал его в масштабе нескольких терабайт ), который имеет много серверных частей и делает инкрементные резервные копии, разбитые на куски (по умолчанию 25 МБ )и нужно только загрузить фрагменты, которые действительно необходимы для восстановления. Я бы предложил использовать его с scp/sftp, так как он будет работать нормально.

Если вам нужно выполнять резервное копирование настолько быстро, насколько ваша сеть способна передавать файлы, ни один из этих протоколов не подходит. Но для одной большой резервной копии, а затем инкрементных ежедневных (или даже ежечасных )резервных копий с дублированием всего в несколько ГБ должно работать нормально.

1
27.10.2019, 08:50
5 ответов
Команда

cutне является подходящим инструментом для этих требований, однако мы можем создать команду для получения желаемого результата(или инструменты, которые вы должны использовать вместо этого):

<infile cut -d$'\n' -f1$(printf '%s',{3..18..2})

{min..max..step}это фигурная скобка bash -расширение , которое производит ,3,5,7,9,11,...вывод (генерировать нечетные номера полей для опции cut -f-f1,3,5,7,11,...); выберите max с большим числом, если количество строк во входном файле неизвестно.

при этом выбираются только нечетные строки, поэтому, как вы думаете, пустые строки не пропускаются.

1
27.01.2020, 23:14

Это просто удалит пустые строки. Вы можете удалить «файл», если это просто вывод, с которым вы работаете:

sed '/^[[:space:]]*$/d' file

Это работает на всех строках, начинающихся с пробелов, содержащих их и заканчивающихся пробелами.

Если это файл, который вы хотите редактировать напрямую, а не отправлять его на стандартный вывод:

sed -i '/^[[:space:]]*$/d' file

Выход

1
2
3
4
5
6
2
27.01.2020, 23:14

cut в первую очередь является инструментом для извлечения определенных столбцов из данных (в противоположность тому, что делает paste). Поэтому, вероятно, это не правильный инструмент для удаления/извлечения строк текста.

GNU sedможно использовать для удаления каждой второй строки, начиная со строки 2:

$ sed '2~2d' file
1
2
3
4
5
6

... или печатать каждую вторую строку, начиная с первой строки (, игнорируя остальные):

$ sed -n '1~2p' file
1
2
3
4
5
6

Диапазон адресов x~yотносится к строке x, а затем каждая строка yпосле этой (является расширением GNU sedк стандартуsed).

1
27.01.2020, 23:14

Вы не упомянули, откуда берутся данные.

Если это файл:

grep. yourfile

Если это другая команда:

yourcommand | grep.

Это работает, запрашивая grepзахват всех строк, содержащих хотя бы один символ. Но если в ваших пустых строках есть пробелы, это не сработает. Вам необходимо внести следующие поправки:

grep -vE "^\s+$"

Если у вас есть сочетание пустого и белого пространства, вы можете объединить команды в цепочку.

1
27.01.2020, 23:14
awk NF

— это все, что вам нужно. NF — это количество полей, обозначенных пробелами. Ноль является ложным логическим значением, поэтому эти строки не печатаются.

1
27.01.2020, 23:14

Теги

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