Luk*_*kap 14 linux bash shell sed
如果旧字符串存在,则此命令将旧字符串替换为新字符串.
sed "s/$OLD/$NEW/g" "$source_filename" > $dest_filename
Run Code Online (Sandbox Code Playgroud)
如何检查更换是否发生?(或发生了多少次?)
如果您需要计算替换,sed不是正确的工具,awk将更符合您的需求:
awk -v OLD=foo -v NEW=bar '
($0 ~ OLD) {gsub(OLD, NEW); count++}1
END{print count " substitutions occured."}
' "$source_filename"
Run Code Online (Sandbox Code Playgroud)
此最新解决方案仅计算替换的行数.下一个片段用perl计算所有替换.这个有一个优点,比awk我们保持sed替换语法更清晰:
OLD=foo NEW=bar perl -pe '
$count += s/$ENV{OLD}/$ENV{NEW}/g;
END{print "$count substitutions occured.\n"}
' "$source_filename"
Run Code Online (Sandbox Code Playgroud)
感谢威廉,他找到了$count += s///g计算替换数量的技巧(甚至在同一条线上)