我有一个包含以下行的文本文件:
set stime = '0 0'
我需要将其更改为:
set stime = '0 4'
我尝试了以下命令:
sed -i 's/original/new/g' file.txt
和
awk '{gsub(/pattern/,"replacement")}' file
但它们不起作用。我猜是因为模式中的撇号。我该如何正确执行此操作?
答案1
为了转义单引号'
,您应该使用双引号:"
。
为了进行就地更新,您应该使用sed -i
以下代码应就地更新,并转义单引号:
sed -i "s/set stime = '0 0'/set stime = '0 4'/g" input_file_name
答案2
您有以下几种选择:
对于 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
将模式保存在 shell 变量中并使用双引号:
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
不要使用整个模式。只需找到正确的行并替换需要更改的内容,避免使用引号。例如,如果您只出现一次
set stime
,您可以执行以下操作:sed '/set stime/{s/0 0/0 4/}' file
或者
awk '$1=="set" && $2=="time"{sub("0 0","0 4")}1' file