Shell脚本:好主意,写得不好
我必须制作一个shell脚本,返回一个列表,其中包含3行或更多行上有单词“hello”的所有文件 我知道这个想法,但我觉得我的剧本写得不好Shell脚本:好主意,写得不好,shell,scripting,Shell,Scripting,我必须制作一个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) -
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=$(ls | wc-l)
对于((i=0;i
首先,我取一个返回文件数的数字“nr”,而不是一个从0到nr的数字,并将所有文件放入一个数组fis[I],用sed选择每一行。然后,如果fis[i]至少在3行上包含“hello”,我会显示它。我认为您编写的代码太多了 您可以将此
用于循环
:
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[@]}"
我知道你的代码很好,但我更想知道我的代码有什么问题。像使用ls、wc、2 for循环、sed和cat这样的东西其实并不需要。它可以在一个
for循环中完成,如我上面所示。