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

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

set stime = '0 0'

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

set stime = '0 4'

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

[ f3]

и

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

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

1
задан 8 June 2017 в 11:50

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 
Сохраните шаблон в переменной оболочки и используйте двойные кавычки: [ f3], затем
sed "s/$pattern/$replacement/g" file
или
awk -vpat="$pattern" -vrep="$replacement" '{gsub(pat,rep)}1;' file 
Не используйте весь шаблон. Просто найдите правильную линию и замените только то, что нужно изменить, избегая цитаты. Например, если у вас есть только одно вхождение 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 May 2018 в 01:02

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

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