LINUX.ORG.RU

Скрипт по замене слов в файле

 , ,


0

3

Ситуация такая:
на вход дается два файла, в одном исходный текст в виде:

Begin "Имя блока1" "имя1" "имя2" ... "имяN"
тут какой-то текст, не важно
End "Имя блока1"

Begin "Имя блока2" "имя1" "имя2" ... "имяN"
тут какой-то текст, не важно
End "Имя блока2"

Во втором дается имя блока в котором нужно провести замену имен, выглядит так:

"Имя блока1" "имя1" "заменить на это"
"Имя блока1" "имя2" "заменить на это"
"Имя блока2" "имя1" "заменить на это"
Скрипт должен произвести замену в тех блоках тех имен, которые указаны во втором файле

Ответ на: комментарий от sdio

Если готов направлять в нужную сторону способен сделать все сам. Просто пока что дальше чем заменить с помощью sed в одном блоке несколько имен на одно и тоже новое не получилось, не понимаю как считать то что нужно из файла

DanShady
() автор топика
Ответ на: комментарий от DanShady

не понимаю как считать то что нужно из файла

От языка зависит.

Если готов направлять в нужную сторону способен сделать все сам.

Мне оно надо?

Просто пока что дальше чем заменить с помощью sed

Не вижу!

sdio ★★★★★
()

Я бы использовал perl или python. Ничего сложного в задаче не вижу, обычные регулярки

Gvidon ★★★★
()
Ответ на: комментарий от DanShady
while read block old1 old2 new; do
  sed -e "/$block/s/\($old1\|$old2\)/$new/g" file1.txt
done < command.file

скрипт я не проверял и не собираюсь. Это тебе направление поиска.

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)

Можно второй файл перевести sed-ом в команды sed-a: /...1/ s/имя1/замена/. А потом скормить другому sed-у, может хватит.

А по-кошерному, тут даже awk будет не очень (ну можно «grep \„имя блока\“» | getline line; split(line, arr) дальше цикл по полям, сравнение и замена). Лушче уж python/ruby.

anonymous
()

Вот тебе еще одно решение:

cat replacements.txt | while read BL OLD NEW ; do sed -i -re "/Begin $BL/s/$OLD/$NEW/" data.txt; done
не будет раотать, если имена содержат пробелы ([nline]read неправильно их понимает).

ddos3
()
Ответ на: комментарий от Stil

У него единственный плюс: есть в коробке, если поделка не предполагает распостранения на слабо контролируемую среду, то смысла особо не вижу. Хотя может не учел важный момент?

anonymous
()

питон с реплейс в главной роли подходит очень хорошо мне кажется

saibogo ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.