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

7

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

set stime = '0 0'

Мне нужно изменить это на:

set stime = '0 4'

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

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

и

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

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

    
задан deepblue 01.03.2017 в 10:50
источник

2 ответа

8

Чтобы избежать одиночной кавычки ' , вы должны использовать двойные кавычки: " .

Чтобы обновить на месте, вы должны использовать sed -i

Следующий код должен обновиться на месте и избежать одиночной кавычки:

sed -i "s/set stime = '0 0'/set stime = '0 4'/g" input_file_name
    
ответ дан Yaron 01.03.2017 в 10:59
источник
5

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

  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 '=="set" && =="time"{sub("0 0","0 4")}1' file
    
ответ дан terdon 01.03.2017 в 11:04
источник

Ознакомьтесь с другими вопросами по меткам