Захват/изменение нескольких групп с помощью sed

Это не нарушит работу скриптов или команд, зависящих от less, поскольку псевдонимы оболочки не будут расширены для скриптов или других команд.

Псевдонимы оболочки используются только для удобства в сеансе интерактивной оболочки. Они не переносятся в сценарии и команды оболочки, которые вы запускаете из этого сеанса оболочки, потому что псевдонимы не являются частью среды, наследуемой дочерними процессами.

Единственная проблема может возникнуть, если вы сами забыли, что у вас есть этот псевдоним, а затем продолжили использовать его с дополнительными параметрами в сеансе интерактивной оболочки. Затем эти варианты будут переданы vim.

Вы также можете использовать viewвместо vim -R.


Что касается «огромных файлов», то это файлы, размеры которых превышают размер вашей оперативной памяти или, по крайней мере, того же размера, что и значительная часть доступной оперативной памяти. Традиционно редакторы загружали в память весь файл при его открытии, и некоторые до сих пор так делают.Таким образом, открытие больших файлов

  1. медлить
  2. потенциальный запуск редактора с ограничением ресурсов (нехватка памяти)

Я полагаю, что редактор Vim работает над этим, используя свои «файлы подкачки» (те, которые вы могли видеть с суффиксом имени файла .swp). См. :help swap-fileв Vim.

Пейджер lessпо умолчанию сохраняет все считанные данные в памяти при чтении из канала. Если считывается больше данных, чем доступно ОЗУ, у вас возникнут проблемы. К счастью, есть опция-B(или --auto-buffers), которая заставляет lessсохранять в памяти только последнюю часть прочитанных данных. Однако это, очевидно, делает невозможным возврат к ранее просмотренным строкам ввода.

Пейджер moreиногда lessзамаскирован (просто жесткой ссылкой на lessдвоичный файл ). В системах, где moreявляется фактическим more, пейджер не позволяет прокручивать назад при просмотре данных, считанных из каналов.

Ни less, ни moreне должны полностью читать файл, чтобы иметь возможность просмотреть его содержимое. Оба будут искать файл в соответствующем месте.

0
03.01.2020, 00:42
3 ответа

Удалите пробел в начале строки, затем замените любой пробел, за которым следует что-то, кроме двоеточия или обратной косой черты, пробелом -обратная косая черта -новая строка -последовательность символов:

Использование GNU sed:

sed -E 's/^ //; s/ ([^:\\])/ \\\n\1/g'
1
28.01.2020, 02:17

Хотя это кажется нелогичным -интуитивным, на самом деле может быть проще всего сшить зависимость обратно в одну строку (, воссоединив продолжения ), а затем снова разбив их на части, сопоставив последовательности горизонтальных пробелов (с необязательным двоеточием ).

Так дано

$ cat input
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h \
../inc/hdr2.h../inc/hdr3.h \
../inc/hdr4.h../inc/hdr4.h

затем

$ sed -e :a -e '/\\$/N; s/\\\n//; ta' input
ThreadCrash.o : ThreadCrash.cpp ThreadCrash.h hdr1.h ../inc/hdr2.h../inc/hdr3.h ../inc/hdr4.h../inc/hdr4.h

и, наконец,

$ sed -e :a -e '/\\$/N; s/\\\n//; ta' input | sed -r 's/[[:blank:]]+(: )?/ \1\\\n/g'
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h

Возможно, вам удастся избежать первого шага, если вы сможете выяснить, как предотвратить разбиение gcc -MMмежду строками.

Ссылка:

0
28.01.2020, 02:17

Использование любого awk в любой оболочке на каждом компьютере UNIX:

$ cat tst.awk
BEGIN { RS="" }
{
    gsub(/\\/,"")
    printf "%s ", $1
    for (i=2; i<NF; i++) {
        printf "%s \\\n", $i
    }
    print $NF
}

$ awk -f tst.awk file
ThreadCrash.o : \
ThreadCrash.cpp \
ThreadCrash.h \
hdr1.h \
../inc/hdr2.h \
../inc/hdr3.h \
../inc/hdr4.h \
../inc/hdr4.h
3
28.01.2020, 02:17

Теги

Похожие вопросы