将 sed 输出传递给 open 命令

将 sed 输出传递给 open 命令

我正在尝试设置一个功能,允许我打开离线 Google 文档。问题是,如果 Chrome 是默认浏览器,它们只能通过 Finder 工作,因为 Google Drive 应用程序将打开该文件,然后将所需的 URL 传递到默认浏览器。由于离线文档无法在 Safari 中打开,我需要更改我的默认浏览器(不,谢谢!)或将提供给 Safari 的 URL 复制并粘贴到 Chrome 中,这样可以正确打开文件。

当运行离线 Google 文档/工作表的 cat 时,会返回如下输出:

{"url": "https://docs.google.com/open?id=31234123fdasdfsg412341", "doc_id":"31234123fdasdfsg412341", "email": "[email protected]", "resource_id": "document:31234123fdasdfsg412341"}

我已经设法使用 sed 提取其中的 https 部分,

sed 's/.*\(https[^"]*\)".*/\1/' myfile.gsheet

一个例子是,

echo '{"url": "https://docs.google.com/open?id=31234123fdasdfsg412341", "doc_id": "31234123fdasdfsg412341", "email": "[email protected]", "resource_id": "document:31234123fdasdfsg412341"}' | sed 's/.*\(https[^"]*\)".*/\1/'

然而,要在 Chrome 中打开它并实际离线查看该文件,我现在需要将其传递给,

open -a 'Google Chrome' <sed_output>

最后,更棘手的部分(!),我需要将整个过程变成一个函数,以便我可以设置别名和类型,

chromeopen myfile.gsheet

并让它从该文件中提取 url 并将其传递给打开。

谢谢!

更新

根据 mmusante 的建议,我创建了一个别名函数来执行此操作,

chromeopenfunc() {
    open -a 'Google Chrome' "$(sed 's/.*\(https[^"]*\)".*/\1/' $1)"
}
alias chrome=chromeopenfunc

答案1

您可以使用 $() 运算符将 sed 输出直接放在命令行上。例如open -a 'Google Chrome' "$(sed 'blah blah blah')"

相关内容