Как обычно в UNIX, решение может быть найдено посредством проверки справочных страниц.
И через 30 секунд после вызова man du
вы должны были найти решение:
du -sh
-121--202416-
Я кое-что копался в формате mbox. Короткий ответ заключается в том, что, хотя нет RFC, указывающего формат mbox, уже в середине 1970-х годов пространство From + использовалось для разделения различных почтовых сообщений, объединенных в один текстовый файл.
В 1-м выпуске Unix от Bell Labs (ноябрь 1971 г.) есть почтовая команда, но исходный код потерян, поэтому я не уверен, как он работал. mbox появляется в 3-м издании . Исходный код для 5-го издания Unix (с июня 1974 года) восстановлен и видно, что маркер From
+␣ уже используется для разделения сообщений. Затем используется синтаксис From, космос, имя без мест и последовательность (24-символьная временная метка, доступная для чтения человеком).
From
+␣ line была введена процессом отправки, который добавил ее к сообщению, введенному отправителем, перед добавлением к почтовому ящику получателя. За этой практикой последовали последующие программы доставки почты, в том числе некогда популярная sendmail , которая зародилась с вариантов Unix от Беркли.
Ранние версии Berkeley Unix были дополнениями к версии Bell Labs. Второй дистрибутив программного обеспечения Berkeley от марта 1979 года уже имеет сложную почтовую программу, если мы сможем увидеть начало файловой структуры, которая позже сформирует sendmail. Код в head.c
идентифицирует From
+␣ маркер и вносит несколько изменений: имя должно быть 17 символов или меньше (что не сохранилось в эпоху сендмейла) и что может быть дополнительный текст между концом даты и новой строкой (что и произошло).
Преемники sendmail, такие как qmail , формализовали синтаксис mbox, включая обработку строк в почтовом сообщении, которые начинаются с From
+␣, проблема, которая привела к разнообразию форматов mbox .
-121--173823-
function somepath () {
[ -z "$1" ] && { pwd; return; }
(cd -P -- "$1" && pwd)
}
Просто создает дочернюю оболочку (чтобы cd
не влиял на текущую оболочку) и печатает cwd. (Редактируется в тесте для случая «no parameter»)
sed 's/^#/ /g;s/\\/ /g' file | xargs | sed 's/option3 /option3 \n/g'
a comment first: info about first: option1 option2 option3
second: info about second: option1 option2 option3
third: info about third: option1 option2 option3
fourth: info about fourth: option1 option2 option3
sed 's/^#/ /g
заменяет #
пустыми пробелами, а ^
соответствует позиции #
в строках. Затем sed s/\\/ /g'
заменяет обратную косую черту \
пробелами.
xargs
выстраивается в линию и создает равные пробелы между словами.
наконец, sed
добавляет новые строки после каждого слова "option3"
С одной программой sed:
sed -E '
# remove leading comment chars
s/^[[:blank:]]*#+[[:blank:]]*//
# label "a" for branching
:a
# if trailing slash:
/\\$/ {
# read next line
N
# remove backslash, newline, leading whitespace and comment char
s/\\\n[[:blank:]]*#*[[:blank:]]*/ /
# branch to label "a"
ba
}
# remove blank lines
/^[[:blank:]]*$/d
' test.txt
Perl довольно компактен, хотя :читать абзацы(-00
)и заменять начальные пробелы и символы комментариев для каждой строки в абзаце (модификаторы /m
и /g
)и удалять обратную косую черту -новая строка.
perl -00 -lanE 's/^\s*#*\s*//mg; s/\\(?:\Z|\n)/ /g; say' test.txt