私のコマンドは次のようになります。
P8.1 ~basicsys/win15/ex8/d1 cd 3 D A X F1 B
だから私は3つのパラメータを持っています:dir(ディレクトリを保持します)str(探している文字列im)num(行番号)
私がする必要があるのは、ファイルを調べて、strが行番号に表示されているかどうかを確認することです。
そして、私は次のようなものを印刷する必要があります:
[ファイル] [ディレクトリのツリーのどこかに行番号numにstrが出現した回数]。
出力:
A 1
B 3
D 2
F1 1
X 0
私のデバッグから、find
コマンドを実行している行に問題があることがわかりました(しばらくの間)。
これは私のコードです:
dir=$1
shift
str=$1
shift
num=$1
shift
echo 'head -$num | tail -1' >| getLine
echo -n "" >| out
chmod +x getLine
while [ $# -gt 0 ]
do
echo -n $1 " " >> out
find $dir -type f -name $1 -exec getLine {} \; >| tmp
egrep -c $str tmp >> out
shift
done
sort out
多分問題はまたにあります echo 'head -$num | tail -1'
お願いします助けてください:/ありがとう!!!
変数が展開されていることを確認するに'
は"
、引用符を二重引用符に置き換える必要があります$num
。
head | tail
、sed
:を試してください。find $dir -type f -name $1 -exec sed $num'q;d' {} \;
フォークと一時ファイルなし。
#!/bin/bash
dir=$1 str=$2 num=$3
shift 3
for name ;do
count=0
while read file ;do
mapfile -s $[num-1] -tn 1 lineNum <"$file"
[ "$lineNum" ] && [ -z "${lineNum//*$str*}" ] && ((count++))
done < <(find $dir -type f -name $name -print)
echo $name $count
done |
sort
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加