shell 计算替换的脚本

shell script for counting replacements

十个文件位于一个目录中。每个文件内容有"apple"个字。编写一个 bash shell 脚本,将所有十个文件中的 "apple" 替换为 "banana" 并打印每个文件的替换次数。以这种方式尝试过但不知道如何获得更换数量。任何人都可以帮忙吗?并且 sed 仅在显示未修改的实际文件中进行修改

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

假设您要在文件的 contents 中而不是在 文件名(见我上面的评论)并且你正在使用 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 标志来打印所有匹配您要替换的单词(每个都在一个新行中)并将结果通过管道传递给wc -l(计算换行符)。结果存储在屏幕上打印的变量中,然后在处理每个文件后重置。
  • 如果您希望 sed 在文件中实际执行替换,您必须指定 -i 标志,否则将在标准输出上执行替换。
  • 此脚本只会替换单词 'apple' 的完全匹配项。因此,例如,单词 'apples' 将 而不是 替换为 'bananas'。如果您想要不同的行为,只需删除单词 'apple' 周围的单词分隔符(单词分隔符是 \<\>)。