Конечно, вы можете настроить screen
или tmux
хардлайн.
Пример использования screen: http://blog.boreas.ro/2008/03/gnu-screen-for-win.html
Пример использования tmux:
tmux
и screen
потрясающие - вы должны научиться их использовать.
Ваш вопрос странный. Вы говорите: «… только что возникла эта ошибка. Я пытался погуглить, но ничего не нашел в этом», сделать вид, что ты понятия не имеешь, что происходит. Но ты же понимаешь это, не так ли? Когда вы говорите sed -z
, вы говорите sed
прочитать ввод, обработка NUL как записи (разделителей строк )вместо новой строки. Но текстовые файлы обычно не содержат символов NUL, так что с практической точки зрения это означает, что вы хотите sed
прочитать весь файл и рассматривать его как одну строку. Вы, очевидно, понимаете это; ваша 's/.*/[&]/'
команда, чтобы «заключить весь файл в квадратные скобки», не имеет смысла, если вы не ожидаете полного файла рассматриваться как одна линия.
Так почему же вы так удивлены, что ваш большой файл слишком велик, чтобы его можно было обрабатывать как одну строку?
Вы говорите, что ваш сценарий иногда срабатывает — предположительно, когда размер файла меньше максимального размера строки, разрешенного sed
. Этот скрипт должен делать то же самое, независимо от размера файла:
cat "$FILE" | sed -e 's/.*/"&",/' -e '1s/^/[/' -e '$s/$/]/' | tr --delete '\n'
Конечно, это все еще может задохнуться, если какая-либо отдельная строка во входных данных абсурдно долго.
Примечания:
{
и }
; "$FILE"
в порядке.[
в начале первой строки и добавляет ]
в конце последней строки. sponge
для иллюстрации. Перезапись вашего входного файла может быть необходима для работы, но это плохо делать, пока вы все еще отлаживаете. Добавьте команду sponge
обратно, когда будете уверены, что она делает то, что вам нужно. Это дублирует ваш скрипт, поэтому ввод
The quick brown fox
jumps over
the lazy dog.
даст результат
["The quick brown fox","jumps over","the lazy dog.",]
с дополнительной запятой перед ]
. Если это действительно то, чего ты хочешь, хорошо, я согласен. Если вам не нужна запятая в конце, введите
cat "$FILE" | sed -e 's/.*/"&",/' -e '1s/^/[/' -e '$s/,$/]/' | tr --delete '\n'
где команда '$s/,$/]/'
удаляет запятую в конце файла при добавлении ]
.
Также обратите внимание, что все обсуждавшиеся до сих пор команды оставит вам файл без символов новой строки,ни одного в конце. Это искаженный текстовый файл, и некоторые команды не могут правильно его обработать. Если это действительно то, чего ты хочешь, хорошо, я согласен. В противном случае добавьте
echo >> "$FILE"
или
printf '\n' >> "$FILE"
в конце вашего скрипта.
Если вы не требовали sed, awk может сделать это, ИМХО, немного понятнее:
Редактировать :оригинальный метод (исправлено G -Man, tnx ), который я основывал на выводе примера в Q с запятой после последней строки:
awk <"$FILE" -vORS= -vq=\" 'BEGIN{print "["} {print q $0 q ","} END{print "]\n"}' | sponge "$FILE"
sponge
для отладки \n
Добавлен :модифицированный метод, основанный на запросе на удаление последней запятой перед добавлением скобок:
awk <"$FILE" -vORS= -vq=\" 'BEGIN{print "["} {print sep q $0 q; sep=","} END{print "]\n"}' | sponge "$FILE"
(В awk неинициализированная переменная в строковом контексте гарантированно вернет пустую строку, но если вы предпочитаете быть явным, добавьте -vsep=
к опциям или ;sep=""
к блоку BEGIN
для ее инициализации.)