我必须创建一个shell脚本,该脚本返回一个列表,其中包含3行或更多行中包含'hello'字样的所有文件。
我知道这个想法,但我认为我写的剧本不好。
nr=$(ls | wc -l )
for ((i = 0; i < nr ; i++));do
fis[$i]=$(ls | sed -n '$i p')
done
for ((i = 0; i < nr ; i++));do
if [$(cat $(fis[$i]) | grep 'hello' | wc -l) -gt 2 ];
then
echo $( fis[$i])
fi
done
首先我取一个返回文件数的“nr”,而不是从0到nr的数字,并放入一个数组fis [i]所有文件,用sed选择每一行。而且,如果fis [i]在至少3行上包含'hello',我会显示它。
答案 0 :(得分:1)
我认为你编写了太多代码。
您可以使用此for loop
:
files=()
for f in *; do
[[ $(grep -c "hello" "$f") -gt 2 ]] && files+=("$f")
done
printf "List of files with more than 2 occurrences of 'hello' is:\n"
printf "%s\n" "${files[@]}"