Повторите номер списка при вставке новой записи

У меня есть текстовый файл с пронумерованными записями:

1. foo 2. bar 100% 3. kittens 4. eat cake 5. unicorns 6. rainbows 

и так далее до некоторого большого количества. Затем после пустой строки новый блок начинается с 1.

Я вставляю новую запись, заменяя, скажем, 4. и мне нужно перенумеровать все последующие записи в блоке:

 1. foo 2. bar 100% 3. kittens 4. sunshine < 5. eat cake 6. unicorns 7. rainbows 

5 Solutions collect form web for “Повторите номер списка при вставке новой записи”

Решение VIM

Начните с создания своего списка:

 1. foo 2. bar 100% 3. kittens 4. eat cake 5. unicorns 6. rainbows 

Вставить запись

 1. foo 2. bar 100% 3. kittens 4. eat cake 4. sunshine 5. unicorns 6. rainbows 

Поместите курсор на 4. sunshine и из режима команды нажмите shift + v , затем сдвиньте + g . Это визуальный выбор до конца файла. Вы также можете перемещать курсор в конец блока обычными способами.

Нажмите : для входа в командный режим, и вы увидите следующее:: :'<,'> . Теперь введите следующее:

norm Ctrl + V Ctrl + A

Что делают Ctrl-v и ctrl-A, они позволяют вводить «точный» ключ, поэтому он будет меняться на ^A , выделен. Это в основном говорит for all lines selected, execute in normal mode keypress Ctrl-A том, что for all lines selected, execute in normal mode keypress Ctrl-A и Ctrl-A по умолчанию увеличивает число под курсором. Вы увидите, что цифры меняются

Решение в действии:

До

введите описание изображения здесь

После

введите описание изображения здесь

Вы всегда можете добавить новую запись с помощью x. newentry синтаксис x. newentry и перенумеровать все после чего с чем-то вроде:

 awk -F . -v OFS=. '{if (NF) $1 = ++n; else n = 0; print}' 
  • -F . : устанавливает разделитель полей в . 1
  • -v OFS=. : то же самое для разделителя поля вывода ( -F . является коротким для -v FS=. ).
  • {...} : нет условия, поэтому код внутри {...} запускается для каждой строки
  • if (NF) , если число полей больше 0. С FS . , это означает, что если текущая строка содержит хотя бы одну . , Мы могли бы также сделать это, if (length) проверить непустые строки.
  • $1 = ++n : установите первое поле в приращение n (первоначально 0, затем 1, затем 2 …).
  • else n = 0 : else (при NF == 0) сбросить n до 0.
  • print : напечатать (возможно, измененную) строку.

1 Синтаксис: -F <extended-regular-expression> но когда <extended-regular-expression> – это единственный символ, который не принимается как регулярное выражение (где . Означает любой символ), а вместо этого.

Максимальный избыток (и сложность! И ошибки!) Могут быть получены через модуль Perl Text :: Autoformat .

 % < input 1. foo 2. bar 100% 3. kittens 4. it is getting dark. there may be a grue 4. no seriously, it's getting dark 4. really, you should find a light or something. 4. are you even paying attention? helloooo 4. eat cake 5. unicorns 6. rainbows % perl -MText::Autoformat -0777 -ple '$_=autoformat $_, { all => 1 }' < input 1. foo 2. bar 100% 3. kittens 4. it is getting dark. there may be a grue 5. no seriously, it's getting dark 6. really, you should find a light or something. 7. are you even paying attention? helloooo 8. eat cake 9. unicorns 10. rainbows % 

Фактические результаты будут зависеть от ввода, желаемого выхода, пройденных опций и т. Д.

Используя базовые инструменты оболочки, это можно сделать так: это может быть даже проще:

 paste -d . <(seq $(wc -l < new.list)) <(cut -d . -f 2- < new.list) 

Я объясню извне:

 paste -d . file1 file2 

создает выходные строки из файлов в виде столбцов. -d . устанавливает разделитель в . , который будет зависеть от новых номеров.

 commandA <(commandB) 

запускает commandB и выводит вывод так, как если бы он считывал файл в commandA , который ожидает имя файла в качестве аргумента. (См. Замену команд.)

Второй аргумент paste , <(cut -d . -f 2- < new.list) , выводит второй столбец без изменений, каждая строка из второго поля <(cut -d . -f 2- < new.list) , что означает начало после . ,

Первый аргумент paste создает новые последовательные номера строк: он сначала подсчитывает строки, используя строки «wordcount lines»: $(wc -l < new.list) , и использует это число для создания последовательности чисел от 1 до count, с seq 7 .

удалить числа: cut -d" " -f2- < list.txt > temp.txt

вставить строку в temp.txt

make numbers: cat -n temp.txt| sed -e 's/^[ ]*\([0-9]*\)[ \t]*\(.*\)/\1. \2/' > list.txt cat -n temp.txt| sed -e 's/^[ ]*\([0-9]*\)[ \t]*\(.*\)/\1. \2/' > list.txt

  • Как удалить все строки, которые имеют одно значение в строке?
  • заменить запятую на определенное значение столбца
  • Извлечь строку перед точками в новый файл
  • Подсчет строк строки
  • объединить содержимое двух файлов с суммированием содержимого столбца 2?
  • Удалите все между вторым и вторым последним совпадением
  • Обратный порядок пар строк текстового файла
  • Команда для поиска строки внутри шаблона
  • Выберите строку с пустой строкой выше и ниже
  • Заменить скомпилированные символы юникода
  • Добавить столбец в таблицу
  • Поиск дубликатов блоков текста в файле с использованием сценария оболочки
  • Interesting Posts

    Разрешить 1 час только в день с помощью PAM

    Можно ли установить определенную версию пакетов, от которых зависит основной пакет?

    копировать файлы с сервера tftp

    Vim: вставка строк по строкам

    Могу ли я сделать резервную копию mySQL без сохранения моего пароля в файле?

    Эпиляция языка сценариев

    Какие сценарии bash выполняются при запуске терминала?

    Не удалось подключить файловую систему UFS от Sparc Solaris до x86_64 Linux

    Двойная настройка монитора с помощью xrandr: расширение без / с отключенной прокруткой

    Вывод одной команды передается на другой; как закрыть оба?

    stat на зашифрованном томе в osx занимает много времени

    Переключение рабочего пространства карты на кнопки мыши в корице

    Что имеет приоритет – разрешение владельца / пользователя и группы?

    Использование символической ссылки в каталоге с содержимым

    Невозможность переключиться на консоль с помощью Ctrl + Alt + F1, когда Mint замерзает

    Linux и Unix - лучшая ОС в мире.