1

このコードは明らかに機能しませんが、機能させるための構文変更を探しています。

for every item that grep finds
    set myCommand to do shell script "grep -w word test.log"
    set mySecondCommand to do shell script "grep -w end test.log"
end

次の出力は正しいはずです(私が欲しいもの):

word
end
word
end

代わりに、この理論的な「grepが検出するすべてのアイテムに対して」ステートメントがないため、取得します(この出力は必要ありません):

word
word
end
end
4

1 に答える 1

1

最初の grep の結果は文字列形式になります。1本の長いひも。それらを繰り返すには、文字列をリストに変換する必要があるため、「paragraphs」コマンドを使用します。最初の grep 結果をリスト形式で取得したら、繰り返しループを使用してリスト内の項目を処理できます。アイテムを処理するときは、それらの結果を新しいリストに保存して、スクリプトの最後に合計結果を表示できるようにする必要があります。このようなもの...

set firstWord to "word"
set secondWord to "end"

-- use the ls command and grep to find all the txt documents in your documents folder
set aFolder to (path to documents folder) as text
set grepResults to do shell script "ls " & quoted form of POSIX path of aFolder & " | grep \"txt\""
set grepResultsList to paragraphs of grepResults

-- search the found txt documents for the words
set totalResults to {}
repeat with aResult in grepResultsList
    set thisPath to aFolder & aResult
    try
        set myCommand to paragraphs of (do shell script "grep -w " & firstWord & space & quoted form of POSIX path of thisPath)
        set myCommandCount to count of myCommand
        set end of totalResults to {thisPath, firstWord, myCommandCount, myCommand}
    end try

    try
        set mySecondCommand to paragraphs of (do shell script "grep -w " & secondWord & space & quoted form of POSIX path of thisPath)
        set mySecondCommandCount to count of mySecondCommand
        set end of totalResults to {thisPath, secondWord, mySecondCommandCount, mySecondCommand}
    end try
end repeat
return totalResults
于 2011-06-30T14:36:23.360 に答える