如何检查sed命令是否替换了一些字符串?

Luk*_*kap 14 linux bash shell sed

如果旧字符串存在,则此命令将旧字符串替换为新字符串.

sed "s/$OLD/$NEW/g" "$source_filename" > $dest_filename
Run Code Online (Sandbox Code Playgroud)

如何检查更换是否发生?(或发生了多少次?)

Gil*_*not 8

如果您需要计算替换,不是正确的工具,将更符合您的需求:

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)

此最新解决方案仅计算替换的行数.下一个片段用计算所有替换.这个有一个优点,比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计算替换数量的技巧(甚至在同一条线上)

  • 你试过这个吗?当我在我的文件上运行它时,它会在控制台中打印整个文件,我只想计算'foo'被'bar'替换的次数 (2认同)
  • 我认为OP还说"发生了多少次".不只是在多少行,而是在多少次替换.awk和perl的答案只计算被替换的行数. (2认同)
  • 在perl中尝试`$ count + = s/$ ENV {OLD}/$ ENV {NEW}/g;`(在5.10中测试) (2认同)