用于计算替换的shell脚本

时间:2015-06-22 08:38:21

标签: bash replace count

目录中的十个文件。每个文件内容都有“苹果”字样。编写一个bash shell脚本,在所有十个文件中将“apple”替换为“banana”,并打印每个文件的替换次数。尝试过这种方式,但不知道如何获得更换次数。有人可以帮忙吗?和sed只是在显示实际文件中修改未修改

#!/bin/bash 
for f in *.txt 
do sed 's/apple/banana/g' $f 
done

1 个答案:

答案 0 :(得分:1)

假设您要在文件的内容中替换“banana”一词(完全匹配),而不是文件名(请参阅上面的评论)并且您正在使用bash shell:

#!/bin/bash

COUNTER=0

    for file in *.txt ; do
        COUNTER=$(grep -o "\<apple\>" $file | wc -l)
        sed -i 's/\<apple\>/banana/g' $file
        echo "RESULT: $COUNTER replacements in file $file"
        let COUNTER=0
    done

exit 0;

说明:

  • 要计算每个文件的替换数,可以使用带有grep标志的-o来打印所有与要替换的单词匹配的匹配项(每个都在一个新行中),并将结果传递给{{ 1}}(计算换行符)。结果存储在一个变量中,该变量打印在屏幕上,然后在处理完每个文件后重置。
  • 如果您希望wc -l实际执行文件中的替换,则必须指定-i标志,否则将在标准输出上执行替换。
  • 此脚本仅替换“apple”一词的完全匹配。因此,例如,“苹果”一词将替换为“香蕉”。如果你想要一个不同的行为,只需删除单词'apple'周围的单词分隔符(单词分隔符为sed\<)。