獲取剪貼板文本並刪除連字元
我正在執行 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 複製的文本。給定一個工作選項,您只需將其添加到兩者pbpaste
和pbcopy
.另一件可能出錯的事情是同時
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 使用
stdout
shell 腳本,您只需選擇該to stdin
選項(如果通過管道傳輸到腳本,這就是數據到達的地方)。shell 腳本就是:#!/bin/sh sed ':rep /-$/ {N; s/-\n//; b rep}'