Замените шаблон, содержащий апостроф в файле

У меня есть текстовый файл, который содержит эту строку:

set stime = '0 0'

Я должен изменить это на:

set stime = '0 4'

Я попробовал эти команды:

sed -i 's/original/new/g' file.txt

и

awk '{gsub(/pattern/,"replacement")}' file 

но они не работают. Я предполагаю, что это из-за апострофа в шаблоне. Как я могу сделать это правильно?

7
задан 8 June 2017 в 01:50

2 ответа

Для выхода из одинарной кавычки ', необходимо использовать двойные кавычки: ".

для обновления оперативный, необходимо использовать sed -i

, следующий код должен обновить оперативный, и выйти из одинарной кавычки:

sed -i "s/set stime = '0 0'/set stime = '0 4'/g" input_file_name
8
ответ дан 23 November 2019 в 06:18

У Вас есть несколько вариантов:

  1. двойные кавычки Использования вместо одинарных кавычек для sed или команд awk:

    sed -i "s/set stime = '0 0'/set stime = '0 4'/g" file
    

    или

    awk "{gsub(/set stime = '0 0'/,\"set stime = '0 4'\")}1;" file 
    
  2. Сохраняют шаблон в переменной оболочки и используют двойные кавычки:

    replacement="set stime = '0 4'"
    pattern="set stime = '0 0'"
    

    затем

    sed "s/$pattern/$replacement/g" file
    

    или

    awk -vpat="$pattern" -vrep="$replacement" '{gsub(pat,rep)}1;' file 
    
  3. не используют весь шаблон. Просто найдите правильную строку и замените только что потребности быть измененными, избежав кавычки. Например, если у Вас только есть одно возникновение set stime, можно сделать:

    sed '/set stime/{s/0 0/0 4/}' file 
    

    или

    awk '$1=="set" && $2=="time"{sub("0 0","0 4")}1' file
    
5
ответ дан 23 November 2019 в 06:18

Другие вопросы по тегам:

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