подстановка слов в скрипте bash - PullRequest
0 голосов
/ 24 августа 2018

У меня есть команда sed, которая ищет определенное слово в текстовом файле для сопоставления с образцом, а затем добавляет дату в конец строки, содержащей это конкретное слово.это кодовый блок

some_function() {
        while IFS=: read -r jname state; do
                echo "the job is $name"
                if [[ -n ${name} ]]
                then
                //code to get creation date which works fine
                creation_date="00-00-00_00-00-00"
                sed -i '/^'$job_name':/s/$/':$creation_date'/' $logs_folder/job_state.$today
                fi
        done <"$logs_folder/job_state.$today"
}

все работает нормально до команды sed.Эта команда не работает для определенных имен, таких как ARCHIVE-REQUEST - New, ARCHIVE-REQUEST - rss_master Команда sed выдает ошибку

sed -i '/^ARCHIVE-REQUEST' - 'rss_master:/s/$/:00-00-00_00-00-00/' file.txt
sed: -e expression #1, char 17: unterminated address regex

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

. Вот мой пример файла

aggressive_cleanup_wrapper_M3
aggressive_cleanup_wrapper_M5
aggressive_cleanup_wrapper_others
aggressive_cleanup_wrapper_R720
ARCHIVE-REQUEST - Approval Pending
ARCHIVE-REQUEST - Archive
ARCHIVE-REQUEST - Lock Period
ARCHIVE-REQUEST - New
ARCHIVE-REQUEST - rss_master

Как я могу изменить свойКоманда sed для работы с остальной частью моего кода?Может кто-нибудь предложить, пожалуйста?

1 Ответ

0 голосов
/ 24 августа 2018

Вы не понимаете, как работает побег.Вам нужно сделать это:

sed -i '/^'"$job_name"':/s/$/':"$creation_date"'/' ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...