我的输入文件中有以下几行,我想用新字符串替换“=”符号后的所有文本,例如“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
和),您可以使用:$mycity
sed
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