Text-Processing
從剪貼板中的文本中部分刪除格式
我需要刪除剪貼板中包含的文本中的格式,但保留一些元素。最重要的是“新行”字元。在一個簡單的腳本中,效果
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 TARGETS
CLIPBOARD 選擇的目前所有者提供的選擇目標的輸出。在 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}
語法進行任何後處理。