Заменить номер последовательным идентификатором в SED

У меня есть около 12 тыс. файлов с такой строкой:

script_oid("1.3.6.1.4.1.25623.7.0.391810");

Мне нужно изменить последние 6 цифр (391810) на последовательный идентификатор, начинающийся с 300000. Пока я сделал это:

`find . -type f -name '*.nasl' -exec sed -i -e 's/script_oid("1.3.6.1.4.1.25623.7.0.\(.*\)/script_oid("1.3.6.1.4.1.25623.1.0.\1/g' {} \;`

Я пробовал некоторые идеи с AWK, но пока не нашел решения. Итак, мне нужна помощь здесь. Я запускаю это на Ubuntu 16.04.

Заранее спасибо за вашу помощь.

С наилучшими пожеланиями,

Если вы хотите изменить несколько строк, опубликуйте минимальный воспроизводимый пример (включая ввод и вывод) с несколькими строками, чтобы у нас было что-то, что поможет продемонстрировать ваши требования, и мы можем протестировать потенциальное решение. См. Как спросить, если это неясно.

Ed Morton 11.04.2019 19:47

Привет @EdMorton, я не хочу изменять несколько строк, только строку, которую я упомянул в своем посте script_oid("1.3.6.1.4.1.25623.7.0.391810");, которая представляет собой одну строку в более чем 12 000 файлов. Я хочу изменить последние 6 цифр в строке (1.3.6.1.4.1.25623.7.0.391810 — последние 6 будут 391810) на порядковый номер, начинающийся с 300000. Я пробовал SED, но, как я сказал в своем посте, я нужна помощь здесь. Заранее спасибо!

SecretCoder 11.04.2019 20:48

Похоже, вы хотите изменить несколько строк, они просто распределены по нескольким файлам. Так что покажите это как минимальный воспроизводимый пример. Скажем, 3 файла с этой строкой в ​​контексте в каждом файле вместе с небольшим количеством действительно репрезентативных других строк или окружающего текста в тех же строках, которые вы не хотите изменять. Если это действительно всего 1 строка в 1 файле, просто используйте vi.

Ed Morton 11.04.2019 20:50

@EdMorton: Нет, я не хочу изменять несколько строк. Только одна (1) отдельная строка на более чем 12 000 файлов. Эта строка, которую мне нужно изменить, это script_oid("1.3.6.1.4.1.25623.7.0.391810");.

SecretCoder 11.04.2019 20:52

Когда скрипт будет готов, будет изменено более 1 строки, так что это звучит как несколько для меня, но как бы вы ни хотели это сказать... создайте минимальный воспроизводимый пример, который демонстрирует ваши требования, и мы можем протестировать, если вы хотите получить хороший ответ .

Ed Morton 11.04.2019 20:55

@EdMorton: Просто чтобы вы знали, что ответ tshiono идеален и решил проблему.

SecretCoder 12.04.2019 03:34

Хорошо, спасибо за продолжение. Он потерпит неудачу по-разному, учитывая различное возможное содержимое входного файла (например, он не экранирует . в регулярном выражении, поэтому они будут соответствовать любому символу, а не только строкам, которые вы пытаетесь сопоставить), он имеет ненужную избыточность (a группа захвата вокруг фиксированной части строки + обратная ссылка было бы лучше), и это крайне неэффективно (см. unix.stackexchange.com/q/169716/133219), но это здорово, что вы довольны единственным ответом, который вы получили, и мне жаль, если вы чувствовали, что я пытался сделать что-нибудь, кроме как помочь вам с моими комментариями.

Ed Morton 12.04.2019 06:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста попробуйте:

id=300000
while IFS= read -r -d "" f; do
    sed  -e "s/script_oid(\"1.3.6.1.4.1.25623.7.0.\(.*\)/script_oid(\"1.3.6.1.4.1.25623.1.0.$id/g" "$f"
    id=$((++id))
done < <(find . -type f -name '*.nasl' -print0)

Обратите внимание, что id присваивается в порядке появления find.

Другие вопросы по теме