До такого странного поведения я установил строку mda...
в конце моего .fetchmailrc
, и по какой-то неизвестной мне пока причине это было применено ко всем моим аккаунтам.
Проблема, с которой я столкнулся, заключалась в том, что fetchmail возвращался к своему нормальному поведению. -mda был установлен как последняя строка, поэтому он применялся только к последней учетной записи в файле rc -.
Не знаю, как это работало раньше, но после добавления инструкции mda к каждой записи учетной записи вся почта загружается и пересылается должным образом.
Попробуйте
$ sed -n -e '/[{]/,/[}]/{p; /[}]/ a\ //end of block matching brace' -e' }' file
{sdfg
If I add backslashes or place everything on one line I get
df }
//end of block matching brace
Помните о ДВУХ-e
(параметрах выражения ), которые необходимы, потому что вам нужно завершить присоединяемый текст. Не все версии sed
позволяют добавлять текст в ту же строку (, что делает мой GNU sed
, а мой FreeBSD sed
— нет ).
С gnu make и оболочкой, которая принимает $''
вы можете использовать промежуточную переменную в качестве дескриптора make \eol
по-разному вне рецептов:
make -f - <<\!
define mycmd
sed -n $$'/[{]/,/[}]/{\n\
p\n\
/[}]/a\\\n\
//end of block matching brace\n\
}' myfile.txt
endef
.PHONY: default
default:
$(mycmd)
!
В каждой строке было добавлено \n\
, а одиночная \
была удвоена. Make преобразует \eol
внешние рецепты в пробел, так что все они заканчиваются на одной строке, затем оболочка $''
преобразует \n
в настоящие новые строки. Вам не нужно использовать define
для установки переменной; MYCMD = sed...
работает аналогично.
Всякий раз, когда я борюсь с новыми строками, обратными косыми чертами, например, в make-файлах, я использую команду G
в sed. Более того, он позволяет оставаться в рамках Posix sed :
$ sed -e '/[{]/,/[}]/!d' -e '/[}]/G' -e 's|\n|&//end of block matching brace|' myfile.xt