Executando o seguinte código AppleScript no AppleScript Editor:
set theText to "I ate an apple at 11:54 pm without the skin."
set theTime to do shell script "awk -F ' at | am | pm ' '{print $2}'<<<" & quoted form of theText
log "The time was: " & theTime
set theText to "I ate two navel oranges at 6:30 am with a glass of water."
set theTime to do shell script "awk -F ' at | am | pm ' '{print $2}'<<<" & quoted form of theText
log "The time was: " & theTime
Produz a seguinte saída no log de eventos do AppleScript Editor:
tell current application
do shell script "awk -F ' at | am | pm ' '{print $2}'<<<'I ate an apple at 11:54 pm without the skin.'"
--> "11:54"
(*The time was: 11:54*)
do shell script "awk -F ' at | am | pm ' '{print $2}'<<<'I ate two navel oranges at 6:30 am with a glass of water.'"
--> "6:30"
(*The time was: 6:30*)
end tell
Nos exemplos acima eu defini os separadores de campo (delimitadores) em awk
utilizando a -F
opção como ' at | am | pm '
o que equivale a "at", "am" e "pm" e imprime '{print $2}'
o que há entre os separadores de campo .
Nota: O uso do log
comando não é necessário para a codificação da resposta e está sendo usado apenas para mostrar qual o valor de theTime
para a saída do Log de Eventos, além do que é mostrado a seguir -->
, que é o resultado normalmente mostrado no Log de Eventos .
Atualização: eu escrevi minha resposta original com base em uma interpretação literal, quando disse: " Então, eu gostaria que o delimitador de item de texto de abertura fosse at_
e o delimitador de item de texto de fechamento fosse um _pm
ou outro_am
", o que se queria era usar literalmente aqueles como os delimitadores. No entanto, como uma solução diferente usando código AppleScript puro , em uma resposta separada, foi apresentada, deixe-me apresentar uma solução de código AppleScript de uma linha que faz a mesma coisa que as 8 linhas de código AppleScript puro e com foco nos dois pontos , mas como parte de uma representação RegEx do tempo em horas e minutos.
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
Executando o seguinte código AppleScript no AppleScript Editor:
set theText to "I ate an apple at 11:54 pm without the skin."
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
set theText to "I ate two navel oranges at 6:30 am with a glass of water."
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
Produz a seguinte saída no log de eventos do AppleScript Editor:
tell current application
do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<'I ate an apple at 11:54 pm without the skin.'"
--> "11:54"
do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<'I ate two navel oranges at 6:30 am with a glass of water.'"
--> "6:30"
end tell
Como você pode ver, se há um ou dois números precedendo os dois pontos, o RegEx corresponde e o awk
programa retorna a correspondência desejada, sendo a hora atual.
Pessoalmente, eu escolheria usar esse método específico sobre minha resposta original, pois é um método melhor nessas circunstâncias e ou sobre o código AppleScript puro , pois não posso justificar a escrita de 8 linhas de código AppleScript puro quando uma única linha de código AppleScript normal produz os mesmos resultados que as 8 linhas!