获取剪贴板文本并删除连字符

获取剪贴板文本并删除连字符

我运行的是 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 复制的文本。给定一个工作选项,您只需将其添加到pbpastepbcopy

另一件可能出错的事情是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 使用stdoutshell 脚本,您只需选择该to stdin选项(如果通过管道传输到脚本,这就是数据到达的位置)。 shell 脚本很简单:

#!/bin/sh
sed ':rep /-$/ {N; s/-\n//; b rep}'

相关内容