Text-Processing

從剪貼板中的文本中部分刪除格式

  • July 19, 2014

我需要刪除剪貼板中包含的文本中的格式,但保留一些元素。最重要的是“新行”字元。在一個簡單的腳本中,效果

variable=$(xsel --clipboard)

是文本似乎都在同一行,因此它失去了所有“新行”字元。

1)有沒有辦法避免這種情況?有時我從 Windows 格式複製文本(所以換行符是“\r\n”),有時是從 *nix 複製文本(所以換行符只是“\n”)。

2)上一個問題是最重要的,但是:還有一種方法可以保留“粗體”、“斜體”和“下劃線”的格式元素?因為使用那個 shell 命令它們也都失去了。

還是非常感謝!

是的。命令替換刪除每個尾隨換行符1。

要解決它:

var=$(xsel --clipboard; echo .)
var=${var%?}

那就是添加.\n到該輸出中。${var%?}然後用(\n由命令替換處理)刪除點。

請注意,除了 with zsh,shell 變數不能包含 NUL 字節。

如果要保留退出狀態:

var=$(xsel --clipboard; ret=$?; echo .; exit "$ret")
ret=$?
var=${var%?}

展開時記得引用$var

printf %s "$var"

輔助函式:

cmdsubst() {
 _var=$1; shift
 eval "$_var="'$("$@"; ret=$?; echo .; exit "$ret")
   _ret=$?
   '"$_var=\${$_var%?}"
 return "$_ret"
}

用作:

cmdsubst var xsel --clipboard

為了保留“粗體”…一些工具將 CLIPBOARD 選擇導出為 text/html,而不僅僅是一個 UTF8 字元串。在這種情況下(使用最新版本的xclip),您可以執行以下操作:

cmdsubst html xclip -sel c -o -t text/html

查看xclip -sel c -o -t TARGETSCLIPBOARD 選擇的目前所有者提供的選擇目標的輸出。

在 iceweasel 中將我的部分評論複製到上面的 Mikel 後的範例:

$ xclip -sel c -o -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/x-moz-url-priv
$ xclip -sel c -o -t text/html
<span class="comment-copy"><i>should</i> remove <i>only one</i> trailing newline</span>
$ xclip -sel c -o -t TEXT
should remove only one trailing newline

1一個例外是該rc系列的外殼,您可以說您不希望對var = ``(){xsel --clipboard}語法進行任何後處理。

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