sed – использовать файл1 для поиска замен, содержащихся в файле2 для строк из файла3

Я новичок здесь и не много писал, я постараюсь сделать это как можно яснее.

Я хочу выполнить поиск и замену, который включает в себя три файла: find.csv идентифицирует строки, содержащие строки. Я хочу заменить всю строку на строку из replace.csv. Третий файл – файл mainfile.csv, который содержит около 1000 строк.

Это то, что у меня есть до сих пор, но я получаю сообщение об ошибке:

sed "s/$(cat find.csv)/$(cat replace.csv)/" mainfile.csv > out.csv sed: 1: "s/CHL_13_R4 DCK_09_R4 ...": unterminated substitute pattern 

Вот как выглядит содержимое файлов:

 find.csv CHL_13_R4 DCK_09_R4 DCK_10_R4 DCK_11_R4 DCK_13_R4 replace.csv CHL_13_R12,CHL_13,R12,10/14/2014 DCK_09_R12,DCK_09,R12,10/14/2014 DCK_10_R32,DCK_10,R32,10/14/2014 DCK_11_R21,DCK_11,R21,10/14/2014 

Основной файл содержит записи как в replace.csv, но около 30 необходимо обновить. Итак, возьмем первую строку в качестве примера. Строку в файле mainfile.csv, которая имеет «CHL_13_R4», должна быть заменена на CHL_13_R12, CHL_13, R12,10 / 14/2014

Спасибо за помощь!

  • Напишите текст в последней строке документа
  • Как использовать переменные в команде sed
  • Назначения значений двойной кавычки, хранящиеся в CSV?
  • Как сохранить часть соответствия шаблону и использовать его для замены в BSD sed?
  • Заменить контент внутри двух конкретных строк
  • Задача для sed конвертировать код из Mathematica в Matlab
  • Чтобы удалить новые строки после пустой строки
  • Удаление нескольких строк
  • One Solution collect form web for “sed – использовать файл1 для поиска замен, содержащихся в файле2 для строк из файла3”

    Сначала создайте сценарий sed из этих двух файлов:

     paste -d$'\t' find.csv replace.csv | sed -e 's:/:\\/:g; s:\t:/:; s:^:s/:; s:$:/g;:' > myscript.sed 

    Это заменит все вхождения строк в find.csv со строками в replace.csv . Он будет терпеть неудачу, если какая-либо из строк в find.csv содержит символ табуляции, поскольку это используется paste в качестве разделителя между соединенными строками.

    Результат выглядит следующим образом:

     s/CHL_13_R4/CHL_13_R12,CHL_13,R12,10\/14\/2014/g; s/DCK_09_R4/DCK_09_R12,DCK_09,R12,10\/14\/2014/g; s/DCK_10_R4/DCK_10_R32,DCK_10,R32,10\/14\/2014/g; s/DCK_11_R4/DCK_11_R21,DCK_11,R21,10\/14\/2014/g; s/DCK_13_R4//g; 

    (обратите внимание, что последняя строка не имеет замены. Это потому, что ваш find.csv имел 5 строк, а ваш replace.csv имел только 4 строки)

    Если вы хотите заменить всю строку, содержащую строки, на find.csv :

     paste -d$'\t' find.csv replace.csv | awk -F$'\t' '{gsub(/\//,"\\/"); print "/"$1"/ s/^.*/"$2"/;"}' > myscript.sed 

    Вывод этой версии выглядит следующим образом:

     /CHL_13_R4/ s/^.*/CHL_13_R12,CHL_13,R12,10\/14\/2014/; /DCK_09_R4/ s/^.*/DCK_09_R12,DCK_09,R12,10\/14\/2014/; /DCK_10_R4/ s/^.*/DCK_10_R32,DCK_10,R32,10\/14\/2014/; /DCK_11_R4/ s/^.*/DCK_11_R21,DCK_11,R21,10\/14\/2014/; /DCK_13_R4/ s/^.*//; 

    В любом случае, какая версия лучше всего подходит для вас, как только вы сгенерировали скрипт myscript.sed , запустите его на своем mainfile.csv :

     sed -f myscript.sed mainfile.csv 

    (необязательно используйте -i если вы хотите сделать «на месте» редактирование на mainfile.csv )

    ПРИМЕЧАНИЕ. Это можно сделать без использования временного файла, такого как myscript.sed для хранения сценария. Большинство версий sed могут запускать скрипты из stdin. Но этот способ позволяет вам изучить и / или отредактировать созданный скрипт sed перед его запуском в вашем основном файле.

    Interesting Posts

    Двойная загрузка Windows – меню Linux Mint grub не появляется при запуске

    Как повторно показать этот приветственный экран vim?

    Ошибки cfdisk с новым внешним USB-накопителем

    E: Не удалось найти пакет vim на Debian jessie упрощенном контейнере Docker

    Оптимальная конфигурация SSD

    Проблема Fedora VNC – получение серого экрана с тремя флажками

    Проблема отправки электронной почты с помощью ssmtp

    Причины для Busybox для существующих систем

    Запуск службы после входа в X-сеанс

    Как найти скорость процессора на Linux с дросселированием

    Как настроить постоянную настройку моста iproute2?

    Что такое программа, которую я могу использовать для автоматизации системы GNU / Linux автоматическим способом?

    Низкая (?) Энтропия доступна в Arch Linux?

    iptables: нет цепочки / цели / соответствия этим именем – добавление правила SSH ATTACK

    Как синхронизировать самые последние файлы из одной папки в другую?

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