Создайте (или отредактируйте, если он существует )следующий ~файл /.ssh/config:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
Я предлагаю это:
printf '%s\n' "$(cat file)" | sed '/./,$!d'
Будет напечатан весь текст, кроме начальных -конечных пустых строк. Итак, если мы расширим пример:
(blank)
(blank)
line1
line2
line1
line2
line1
line2
line1
line2
(blank)
(blank)
Выводится:
line1
line2
line1
line2
line1
line2
line1
line2
Простой двухпроходный подход для полноты картины:
$ awk 'NR==FNR{if (NF) { if (!beg) beg=NR; end=NR } next} FNR>=beg && FNR<=end' file file
line1
line2
В приведенном выше примере строки, состоящие только из пустых символов, считаются пустыми. Если вместо этого вы хотите, чтобы строки без символов считались пустыми, просто измените NF
на /./
.
команда
sed -n '/[a-zA-Z]/,/[a-zA-Z]/p' file| awk 'OFS=":"{$2=$1;$1=NR;print }'
выход
1 line1
2
3 line2
Код не написан, но должен быть эффективный алгоритм для файла любого размера в соответствии с этими строками.
(a )Читать и игнорировать пустые строки до тех пор, пока первая не -пустая.
(b )Чтение и печать не -пустых строк до следующей пустой строки.
(c )Подсчет (n )пустых строк до следующей не-пустой строки.
(d )Если вы нажмете не -пусто, напечатайте n новых строк, и вы вернетесь в состояние (b ).
(e )Если вы нажмете EOF, вы закончите --отбросить n пустых строк перед EOF.
Ed и Ex — редакторы POSIX, которые могут справиться с этой задачей.
Они очень похожи, и в представленных здесь решениях ed
и ex
взаимозаменяемы на 100 % 1 .
printf '%s\n' a ''. 0a ''. '?.?+1,$d' '1,/./-1d' w q | ex -s file
printf '%s\n' '?.?+1,$d' '1,/./-1d' w q | ex -s file
printf '%s\n' a ''. 0a ''. '?[^[:blank:]]?+1,$d' '1,/[^[:blank:]]/-1d' w q | ex -s file
Руководство всегда является лучшим объяснением, но вот обзор:
Ed и Ex всегда начинаются с последней выбранной строки, поэтому, если бы мы неукрашеннаяd
(команда удаления ), она удалит последнюю строку — и они могут искать строки, соответствующие регулярным выражениям.
Некоторые команды принимают адреса («номера строк» ), например. 3,6d
удаляет из строки с 3 по 6.
/regex/
ищет первую строку, соответствующую «регулярному выражению». ?regex?
ищет первую строку, соответствующую «регулярному выражению». Угадайте, что? Регулярное выражение также может быть адресом.
# Insert an empty line at the end
a
.
# Insert an empty line at the beginning
0a
.
# Delete from line L1 up to line L2, where
# L1 is the line below the last non-empty line: ?.?+1
# L2 is the last line: $
?.?+1,$d
# Delete from line L3 up to line L4, where
# L3 is the first line: 1
# L4 is the line above the first non-empty line: /./-1
1,/./-1d
# Write the changes to the file and quit
w
q
Зачем нам временно добавлять две пустые строки для общего решение? Потому что иначе 1,/./-1d
всегда удалял бы первую строку и ?.?+1,$d
последний, пусть и не пустой.
1 :Но IIRC в чистой установке Debian не хватает Ed, поэтому я использую Ex.
2 :То есть визуально пустые строки, но могут содержать пробелы и табуляции.