Clipboard

獲取剪貼板文本並刪除連字元

  • March 31, 2014

我正在執行 Mac OS 10.9,我使用的Text to Speech功能允許您使用熱鍵讀取任何應用程序中的選定文本。我使用此功能在預覽(Apple 的 PDF 查看器)中朗讀 PDF 文件。

問題是所選文本通常有斷字連字元。結果是該Text to Speech功能無法正確讀出文本。

例子:

在此處輸入圖像描述

問題:

你能給我寫一個簡短的 bash shell 腳本,從剪貼板的文本中刪除連字元嗎?我也會使用 automator,所以我可以分配一個熱鍵,並將腳本的輸出發送到 Speak Text 功能。

**編輯:(**回复 goldilocks 的評論)Automator 允許我將選定的文本複製到剪貼板,然後是 shell 腳本,然後是 Speak Text 功能。見下圖。

在此處輸入圖像描述

**第二次編輯:**實際上可能有一種更簡潔的方法來實現這一點:

在此處輸入圖像描述

在“傳遞輸入”選項下有一個“作為參數”選項。我不確定這是否意味著我可以跳過第一張圖片中的“複製到剪貼板”操作,但我想我會提到它以防萬一。

在 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. 它是moreutils的一部分。再次以 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}'

引用自:https://unix.stackexchange.com/questions/122310