1

Я пытаюсь придумать сценарий sed для запуска из оболочки. Мне нужно иметь возможность прочитать список UUID из внешнего файла, который содержит два столбца

origtexta replacementa
origtextb replacementb
origtextc replacementc

Сценарий должен действовать рекурсивно для всех текстовых файлов ниже текущей папки, искать любой экземпляр 'origtext?'и заменить соответствующим текстом из столбца 2. Было бы здорово, если бы скрипт мог храниться в /home /myuser /Scripts / и иметь псевдоним для возможности запуска из любого места, где я его вызываю, и также было бы неплохо, если бы скрипт сохранил исходный текстовый файл как .txt.orig прежде чем менять его.

Я тестировал этот бит до сих пор:

#!/bin/sed
while read n k; do sed -i 's/$n/$k/g' *.txt; done < list

который я нашел в этой теме: Как заменить список строк другим списком

Кажется, что-то делает, потому что даты файлов меняются на текущую дату / время, но текст на самом деле не заменяется, так что я не совсем уверен, как заставить это работать.

1 ответ1

2

Я бы придерживался этого. динамически создавать сценарий sed

while read uuid uuid_alias; do 
    sed_script+="s/$uuid/$uuid_alias/g;"
done < list

find . -type f -name \*.txt -exec sed -i "$sed_script" '{}' +

Вы должны пытаться вызывать sed как можно меньше раз для экономии времени.

Также обратите внимание, что переменные $ не раскрываются внутри "одинарных кавычек" - "двойные кавычки" допускают расширение переменных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .