J'ai un fichier texte qui contient cette ligne:
set stime = '0 0'
Je dois changer cela pour:
set stime = '0 4'
J'ai essayé ces commandes:
sed -i 's/original/new/g' file.txt
et
awk '{gsub(/pattern/,"replacement")}' file
mais ils ne travaillent pas. Je suppose que c'est à cause de l'apostrophe dans le motif. Comment puis-je faire cela correctement?
Pour éviter les guillemets simples '
, vous devez utiliser des guillemets doubles: "
.
Pour mettre à jour sur place, vous devez utiliser sed -i
Le code suivant devrait mettre à jour sur place et échapper à la citation simple:
sed -i "s/set stime = '0 0'/set stime = '0 4'/g" input_file_name
Vous avez quelques choix:
Utilisez des guillemets doubles au lieu de guillemets simples pour les commandes sed ou awk:
sed -i "s/set stime = '0 0'/set stime = '0 4'/g" file
ou
awk "{gsub(/set stime = '0 0'/,\"set stime = '0 4'\")}1;" file
Enregistrez le modèle dans une variable Shell et utilisez des guillemets:
replacement="set stime = '0 4'"
pattern="set stime = '0 0'"
ensuite
sed "s/$pattern/$replacement/g" file
ou
awk -vpat="$pattern" -vrep="$replacement" '{gsub(pat,rep)}1;' file
Ne pas utiliser le motif entier. Il suffit de trouver la bonne ligne et de ne remplacer que ce qui doit être changé, en évitant le devis. Par exemple, si vous n'avez qu'une seule occurrence de set stime
, vous pouvez faire:
sed '/set stime/{s/0 0/0 4/}' file
ou
awk '$1=="set" && $2=="time"{sub("0 0","0 4")}1' file