Applescript 更改剪贴板上的文本

Applescript alter text on clipboard

我已经编写了一个 AppleScript 来自动化我的工作设置,只需要最后的润色。我在我的脚本中复制了一些东西到剪贴板;我需要编辑复制的文本以仅保留最后一行(最好不要打开实际的文本编辑器应用程序,因为这会使我的工作变得混乱 space),然后将该行粘贴到 Google Chrome 浏览器.


到目前为止,在我的脚本的最后一步中,我做了一些导致将消息文本输出到终端的操作。然后我将终端中可见的文本复制到剪贴板,如下所示:

tell application "Terminal"
    tell front window
        set the clipboard to contents of selected tab as text
    end tell
end tell

现在我可以粘贴它,就像

...
[I 15:03:31.259 LabApp] Serving notebooks from local directory: /workspace
[I 15:03:31.259 LabApp] The Jupyter Notebook is running at:
[I 15:03:31.259 LabApp] http://1fw5c518af9:1932/?token=5e6d97b348fsy734gd
[I 15:03:31.259 LabApp]   or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd
[I 23:56:47.798 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:56:47.803 LabApp] 
    
    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime-open.html
    Or copy and paste one of these URLs:
        http://1fw5c518af9:1932/?token=5e6d97b348fsy734gd
     or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd

这总是以 or *URL* 格式的文本结尾,例如在上面的示例中,它将是 or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd。这与上面的行通过行定界符加上一些尾随的白色-space在“或”之前分开。

我需要做的是抓住 URL,启动 Google Chrome 浏览器并将其粘贴到那里。

打开GoogleChrome,应该很简单,下面的代码(来自这个tut)带你去Instagram:

tell application "Google Chrome" to activate

tell application "System Events"
   key code 37 using command down
   delay 0.5
   keystroke "https://www.instagram.com/instagram"
   delay 1
   key code 36
   delay 1

end tell

从字面上看,我所需要的只是将剪贴板上的内容编辑为 *URL*(在上面的示例中,只是 http://88.0.0.1:1932/?token=5e6d97b348fsy734gd)。之后我可以从剪贴板(在教程中输入 Instagram 的地方)粘贴它。


在尝试了下面@user3439894 可爱的回答后,我发现情况有点复杂:

  1. 在最后的“”之后有不可预知的空行数 link.
  2. 我也在想最后会不会有白-space 还有

我已经知道 http://88.0.0.1 的形式(它始终是这样的)那么有没有一种方法可以搜索它然后将它与后面的 link 的其余部分一起抓取? (如果能够用“”或换行符来分隔结尾就太好了)

编辑 2: 如果 http://88.0.0.1... 出现多次,我们希望 select 这些 URL 中的 一个 - 它们通常可能是相同的,但是 select最后 最安全。

What I need to do is grab that URL, start a Google Chrome browser and paste it in there.

&

This always ends with text of the format or *URL*, e.g. in the above example it would be or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd. This is separated from the line above by a line delimiter plus some trailing white-space before "or".

&

In case http://88.0.0.1... occurs multiple times, we would like to select just one of these URLs - they are probably generally the same, but selecting the last would be safest.

如果您要做的是从 contents[=57] 中获取以 http://88 开头的最后一个 URL =]的selected tab of the front window in Terminal, 那么这里是一种不使用剪贴板的方法,并在 Google Chrome 中打开它,也不必使用 UI 脚本.

换句话说,无需更改剪贴板上的文本或敲击 URL,因为您可以告诉 Google Chrome URL.

用什么

示例 AppleScript 代码:

tell application "Terminal" to ¬
    set theTextFromTerminal to ¬
        the contents of ¬
            the selected tab of ¬
                the front window ¬
                    as text

set theURL to ¬
    the last paragraph of ¬
        (do shell script ¬
            "grep -o 'http://88.*$' <<< " & ¬
            theTextFromTerminal's quoted form & ¬
            "; exit 0")

if theURL is "" then return
if theURL does not start with ¬
    "http://88." then return

tell application "Google Chrome"
    activate
    delay 1
    if exists front window then
        make new tab at ¬
            end of front window ¬
            with properties {URL:theURL}
    else
        set URL of ¬
            the active tab of ¬
                (make new window) to theURL
    end if
end tell

注意:示例 AppleScript code 就是这样,没有包含任何 错误处理 不包含任何额外的 错误处理 可能是适当的。用户有责任根据需要添加任何 错误处理 。查看 try statement and error statement in the AppleScript Language Guide. See also, Working with Errors. Additionally, the use of the delay 命令 在适当的事件之间可能是必要的,例如delay 0.5,适当设置延迟