在特定字符后的字符串后查找并替换

在特定字符后的字符串后查找并替换

我的输入文件中有以下几行,我想用新字符串替换“=”符号后的所有文本,例如“good”。

同样,我只想对行中的某些字符串执行此操作。

输入文件:

$myvar1=var1
$myvar2=var2
$myname=name
$myage=age
$mycity=city

输出文件:

$myvar1=var1
$myvar2=var2
$myname=good
$myage=good
$mycity=good

答案1

我认为 sed 是适合您想做的事情的工具,这是我的实现 - 我不是寻找某些东西,而是否定您正在保护的内容:

sed -r '/^((\$myvar1)|(\$myvar2))/!s/=.*$/="good"/g'

答案2

要跳过前两行,您可以使用:

sed '3,$s/=.*/=good/' file

这将执行从第 3 行到最后一行 ( $) 的替换。

答案3

这是你想要的?使用 GNU sed。

sed -E '/var[0-9]/!s/(=).*/\1good/' file

答案4

假设您提前知道要更改的变量名称(例如$myname$myage和),您可以使用:$mycitysed

sed -i '/^\$myname=/s/=.*$/=good/g' input_file_name
sed -i '/^\$myage=/s/=.*$/=good/g' input_file_name
sed -i '/^\$mycity/s/=.*$/=good/g' input_file_name

基本上,这只是说仅在以特定匹配开头的行(带有^\$myname=^\$myage=或 的行^\$mycity=)上运行正则表达式,并将等号加上 ( =.*$) 后面的所有内容替换为等号和相应的字符串 ( =good)。

注意:如果该-i选项在您的 版本中不可用sed,请考虑以下方法以获得相同的效果:

sed '/^\$myname=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$myage=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$mycity/s/=.*$/=good/g' input_file_name > output_file_name

相关内容