我运行的是 Mac OS 10.9,并且使用的Text to Speech
功能允许您使用热键在任何应用程序中读取所选文本。我使用此功能在预览(Apple 的 PDF 查看器)中大声朗读 PDF 文档。
问题是所选文本通常带有断字连字符。结果是该Text to Speech
功能无法正确读出文本。
例子:
问题:
你能给我写一个简短的 bash shell 脚本来删除剪贴板中文本中的连字符吗?我也将使用自动化程序,这样我就可以分配一个热键,并将脚本的输出发送到“朗读文本”功能。
编辑:(回复金发姑娘的评论)Automator 允许我将选定的文本复制到剪贴板,然后是 shell 脚本,然后是朗读文本功能。见下图。
第二次编辑:事实上,可能有一种更简洁的方法来实现这一点:
在“传递输入”选项下有一个“作为参数”选项。我不确定这是否意味着我可以跳过第一张图片中的“复制到剪贴板”操作,但我想我应该提到它以防万一。
答案1
在 Linux 上,以下内容可以工作:
xsel | sed ':rep /-$/ {N; s/-\n//; b rep}' | xsel -i
在 OSX 上我主要是猜测(尽管sed
脚本应该可以正常工作)。pbcopy
似乎要使用的命令。假设 OSX 上有一个选择缓冲区并且pbcopy
默认情况下可以使用它,这可能会起作用:
pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}' | pbcopy
看着在线手册页,似乎有许多“粘贴板”可以使用:
-pboard {general | ruler | find | font}
specifies which pasteboard to copy to or paste from. If no pasteboard is
given, the general pasteboard will be used by default.
我不知道您想要哪一个(如果有的话),而且我看不到任何进一步的文档(尽管我没有看得太深)。您可以尝试一下pbpaste -pboard xxx
,看看会出现什么结果。很有可能一个用于突出显示的文本,而另一个用于使用 Cmd-C 复制的文本。给定一个工作选项,您只需将其添加到pbpaste
和pbcopy
。
另一件可能出错的事情是pbcopy
同时读取和写入同一个粘贴板时出现问题。最简单的解决方案是使用名为 的非标准 Unix 实用程序sponge
。它是一部分更多实用程序。再次以 Linux 为中心:
pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}' | sponge | pbcopy
否则使用变量:
selection=$(pbpaste | sed ':rep /-$/ {N; s/-\n//; b rep}')
echo "$selection" | pbcopy
更新
假设 Automator 使用stdout
shell 脚本,您只需选择该to stdin
选项(如果通过管道传输到脚本,这就是数据到达的位置)。 shell 脚本很简单:
#!/bin/sh
sed ':rep /-$/ {N; s/-\n//; b rep}'