как sed\awk удалить все одинарные пустые строки?

vasek
И похоже, в самом общем случае, лучше написать скрипт, который читает построчно и если встречается пустая строка, то определяется действие, что с ней делать, в зависимости от условия ... готовых решений sed для общего случая нет, а писать ... то уж проще скрипт, используя в нем стандартные команды sed ...
Да sed тут и не нужен тогда.
Как-то так должно быть.
#!/bin/bash

readarray -t TEXT < "$1"
for i in "${!TEXT[@]}"; do
	if ! ([ -z "${TEXT[i]}" ] && [ -n "${TEXT[i-1]}" ] && [ -n "${TEXT[i+1]}" ]); then
		echo "${TEXT[i]}"
	fi
done
Lupus pilum mutat, non mentem.
jim945
Да sed тут и не нужен тогда.
.......полностью согласен ....... написал не подумав ...... и даже не обратил на это внимание ...
UPD ... я думал написать через read line и ввести счетчик пустых строк .......
PS .... readarray .... практически никогда не использовал ....... надо будет почитать о нем ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
read line и ввести счетчик пустых строк .......
сперва такой же вариант в голову пришел, но показался слишком заморороченным.
Нужно считывать три строки, хранить вторую, менять счетчик, проблемы с первой и последней строками.
readarray конечно сначала загружает весь файл в массив. Но для мелких файлов это роли не играет. Да и нагляднее.
P.S. И в этом вариане тоже пропустает первую и последнюю строки)))

Хотя нет. Первую удалет, если последняя не пустая. Зациклил)))
Lupus pilum mutat, non mentem.
т.е. через sed и awk никак?
grayich
т.е. через sed и awk никак?
Можно и через них. 100%. Но это ж надо разбирааться, вникать. Тех кто это сделал здесь пока не видно.
Lupus pilum mutat, non mentem.
jim945
Можно и через них. 100%. Но это ж надо разбирааться, вникать.
+1
grayich, проще сделать это в нормальном ЯП, чем заниматься изучением не нужных sed awk )))
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
grayich
т.е. через sed и awk никак?
Ну если тебе нужно заменить повторяющиеся пустые строки только на одну пустую строку, то используй это
sed -e ':a;/^$/N;/\n$/{D;ba}' /file
Если что то другое (я так и не понял, что нужно ....) ....... то лучше через скрипт ..... а еще лучше не использовать bash ...

PS ... бл ... бл ... опять не читаю с самого начала .....
grayich
удалить все одинарные пустые строки?
То есть оставить повторяющиеся пустые строки .......... и удалить одинарные??? ......... что то ни хрена уже не сооброжаю ...
Ошибки не исчезают с опытом - они просто умнеют
vasek
То есть оставить повторяющиеся пустые строки .......... и удалить одинарные???
ага )
grayich
ага )
На мой взгляд одним sed не получится ....... не от чего оттолкнуться .... только через скрипт ..... как писали выше ....
Можно и с sed в 2 захода (но всеравно без скрипта не обойтись) ... 1-ый заход sed - нумеруем строки .... далее через скрипт получаем номера одинарных пустых строк и 2-ой заход sed - удаляем заданые номера строк ......
Но лучше уж написать один ........ все в одном стакане ....
Ошибки не исчезают с опытом - они просто умнеют
А не проще от обратного - добавить по одной пустой строке после каждой строки (можно в несколько заходов) ...
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.