目录中的十个文件。每个文件内容都有“苹果”字样。编写一个bash shell脚本,在所有十个文件中将“apple”替换为“banana”,并打印每个文件的替换次数。尝试过这种方式,但不知道如何获得更换次数。有人可以帮忙吗?和sed只是在显示实际文件中修改未修改
#!/bin/bash
for f in *.txt
do sed 's/apple/banana/g' $f
done
答案 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
标志,否则将在标准输出上执行替换。sed
和\<
)。