ltrace
- Трассировщик вызова библиотеки.
Это только работает над Linux и в небольшом подмножестве архитектуры. Вызовы к dlopen () библиотеки редактора не будут прослежены. Дальнейшие указатели из страницы справочника и /etc/ltrace.conf
Ваши первые три команды являются преступником:
:a
N
$!ba
Это читает весь файл в память сразу. Следующий сценарий должен только сохранить один сегмент в памяти за один раз:
% cat test.sed
#!/usr/bin/sed -nf
# Append this line to the hold space.
# To avoid an extra newline at the start, replace instead of append.
1h
1!H
# If we find a paren at the end...
/)$/{
# Bring the hold space into the pattern space
g
# Remove the newlines
s/\n//g
# Print what we have
p
# Delete the hold space
s/.*//
h
}
% cat test.in
a
b
c()
d()
e
fghi
j()
% ./test.sed test.in
abc()
d()
efghij()
Это awk решение распечатает каждую строку, как это прибывает, таким образом, это будет только иметь одну строку в памяти за один раз:
% awk '/)$/{print;nl=1;next}{printf "%s",$0;nl=0}END{if(!nl)print ""}' test.in
abc()
d()
efghij()
Для полноты, решения для Perl: perl -p -e '/)$/ || chomp'
Для симметрии: -p
переносит Ваш сценарий в чтение цикла и печать линию за линией; -e
соответствия выражения/сценария )
в конце строки, если это не соответствует (соответствие является ложью) это переходит к chomp
, который удаляет новую строку в конце.
используйте это:
sed -i -z -u 's/\n/ /g' reallyBigFile.log
-г, --ноль -данные
отдельные строки символами NUL
-u, --небуферизованный
загружать минимальные объемы данных из входных файлов и чаще очищать выходные буферы