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

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

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 

  • Обратный порядок пар строк текстового файла
  • Как сопоставить шаблон, удалить шаблон, а также следующую и предыдущую строку в Solaris 10
  • Заменить строку, содержащую новую строку в огромном файле
  • как извлечь определенные столбцы
  • Строки Grep до после, если значение строки больше нуля
  • Удаление символов между | трубами |
  • Взять ввод из одного файла и добавить в другой файл в конкретном столбце
  • Как найти появление имен в файле?
  • 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

    Interesting Posts

    Как включить ядро ​​pstore?

    Изменения в / etc / hosts не распознаются командами оболочки до выхода из системы и входа в систему

    Пустой экран после входа в систему с приостановления на Debian

    Избегайте спрашивать пароль, если “ пользовательская команда su -m` используется под `user`?

    configure: ошибка: библиотека libcurl> = 7.28.0 и заголовки требуются с поддержкой https

    Регулярное изменение / оператор (foo | bar) в GNU или BSD Sed

    Как предотвратить DHCP-сервер из-за маршрутизатора для ответа на запросы DHCP?

    Как Ubuntu 14.04 достигает постоянных этажных интерфейсов?

    Экран GNU mimic emacs frameset-to-register путем написания макета в файл

    Как мне vmtouch каталога (а не файлы, которые он содержит)?

    Почему соответствует строчным буквам в bash?

    Как написать сценарий nawk, который выводит все, кроме пустых строк, и отображает общее количество пустых строк?

    Что такое дисплей и экран в отношении: 0.0?

    Как отключить RC4 для моего SSL-сервера за ELB?

    Минимизировать потребность в sudo

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