我试图找出如何在日志文件中的一长串文本中使用Text Item Delimiters。
在信息记录中,总有一个不变的短语,我正在搜索哪个短语引导我进入文本行。例如,我通过搜索" [常量]" 来到达我想要的行。
我遇到的问题是我无法选择整行来执行分隔符。下面是日志的基本示例。
qwertyuiop
mnbvcxza
oqeryuiiop
[Constant] 1234567890123456-098765432109876-8765432118976543
odgnsgnsanfadf
joiergjdfmgadfs
任何建议都将不胜感激。 到目前为止我用的是:
repeat 16 times
key code 124 using (shift down)
end repeat
工作正常,但很笨重。
答案 0 :(得分:0)
查找包含特定字符串的文本行的简单方法是shell命令grep
。
set theConstant to "Constant"
set theText to "qwertyuiop
mnbvcxza
oqeryuiiop
Constant 1234567890123456-098765432109876-8765432118976543
odgnsgnsanfadf
joiergjdfmgadfs"
set foundLine to do shell script "echo " & quoted form of theText & " | tr '\\r' '\\n' | grep " & quoted form of theConstant
tr
部分用return
(0x0d)字符替换linefeed
(0x0a)字符是符合shell行分隔符要求所必需的。
如果常量包含特殊字符,则它会更复杂,因为在将字符传递给shell之前必须先转义它们。
set theConstant to "\\[Constant\\]"
set theText to "qwertyuiop
mnbvcxza
oqeryuiiop
[Constant] 1234567890123456-098765432109876-8765432118976543
odgnsgnsanfadf
joiergjdfmgadfs"
set foundLine to do shell script "echo " & quoted form of theText & " | tr '\\r' '\\n' | grep " & quoted form of theConstant
如果要从磁盘上的文件中读取文本,可以使用此
set logFile to (path to library folder from user domain as text) & "Logs:myLogFile.log"
set theText to read file logFile as «class utf8»
答案 1 :(得分:0)
你的问题令人费解。您是否要解析文本/日志文件或脚本以使用某些应用程序的GUI?因为这就是你的代码所暗示的......
如果你想解析一个更容易的日志文件,你可以使用OSX自带的老式Unix工具。您可以在Applescript中使用它们,就像这样...
set logfile to "/some/path/file.log"
# Quote the string in case it contains spaces... or add single quotes above...
set qlogfile to quoted form of logfile
# Prepare the shell command to run
set cmd to "grep '^\\[Constant]' " & qlogfile & " | cut -c 12- | tr '-' '\\n'"
# Run it and capture the output
try
set cmdoutput to (do shell script cmd)
on error
# Oh no, command errored. Best we do something there
end try
结果看起来像这样......
tell current application
do shell script "grep '^\\[Constant]' '/some/path/file.log' | cut -c 12- | tr '-' '\\n'"
--> "1234567890123456
098765432109876
8765432118976543"
end tell
Result:
"1234567890123456
098765432109876
8765432118976543"
所以要分解shell命令是
grep ... |
将读取文件的内容,并选择以文本^
开头[Constant]
的所有行,并将其找到|
的内容传递给下一个命令< / LI>
cut
将字符从12
位置切换到该行的结尾-
tr
将所有字符-
替换为\n
,这是unix中换行符的代码。 你看到的\\
是由于它是从Applescript内部执行的。如果你在终端内运行它,你只需要打开。
如果你想知道另一行的一行内容,那么删除最后一个命令| tr '-' '\\n'
,它将返回
Result:
"1234567890123456-098765432109876-8765432118976543"