Скриншот расширенного рабочего стола непрямоугольной формы

Вы можете использовать sed для создания сценария sed из file1, а затем запустить sed с этим сценарием, чтобы превратить file2 в ожидаемый результат:

sed 's!^!s/!;s! = !/!;s!$!/!' file1 | sed -f- file2

first sed выводит

s/This is a string/mystringrocks/
s/This is another string/mystringrocksmore/

, который явно выполняет необходимые вам замены.

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

perl -wE 'while (<>) {
              chomp;
              ($from, $to) = split / = /;
              $h{$from} = $to;
              last if eof;
          }
          $regex = join "|", map quotemeta, keys %h;
          s/($regex)/$h{$1}/, print while <>
         ' file1 file2

Он читает первый файл, разбивает каждую строку на = и сохраняет пару $ из => $ до в хэше. Затем он создает регулярное выражение из всех ключей (то есть из), перебирает второй файл и заменяет совпадения значениями, хранящимися в хэше. Также обычно ключи сортируют по длине, чтобы использовать более длинную строку, если есть два шаблона, которые начинаются в одном месте:

map quotemeta, sort { length $b <=> length $a } keys %h;
3
28.01.2016, 16:26
0 ответов

Теги

Похожие вопросы