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' 周围的单词分隔符(单词分隔符是
\<
和 \>
)。
十个文件位于一个目录中。每个文件内容有"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' 周围的单词分隔符(单词分隔符是
\<
和\>
)。