这是我的shell脚本。 给定一个目录和一个单词,搜索目录并打印具有该单词最大出现次数的文件的绝对路径,并打印出现次数。 我写了以下脚本
#!/bin/bash
if [[ -n $(find / -type d -name $1 2> /dev/null) ]]
then
echo "Directory exists"
x=` echo " $(find / -type d -name $1 2> /dev/null)"`
echo "$x"
cd $x
y=$(find . -type f | xargs grep -c $2 | grep -v ":0"| grep -o '[^/]*$' | sort -t: -k2,1 -n -r )
echo "$y"
else
echo "Directory does does not exists"
fi
result: scriptname directoryname word
output: /somedirectory/vtb/wordsearch : 4
/foo/bar: 3
有没有选择替换xargs grep -c $ 2?因为grep -c打印count =包含该单词的行数,但是我需要在给定目录中的文件中打印单词的确切出现次数
答案 0 :(得分:0)
grep -Fwor "$word" "$dir" | sed "s/:${word}\$//" | sort | uniq -c | sort -n | tail -1
答案 1 :(得分:0)
试试这个:
grep -o -w 'foo' bar.txt | wc -w
OR
grep -o -w 'word' /path/to/file/ | wc -w
答案 2 :(得分:0)
使用grep的-c
计数功能:
grep -c "SEARCH" /path/to/files* | sort -r -t : -k 2 | head -n 1
grep命令将以/path/name:count
格式输出每个文件,排序将以数字(-n
)排序,由第二个(-k 2
)字段排序,由冒号({{分隔) 1}})以相反的顺序(-t :
)。然后我们使用head来保留第一个结果(-r
)。