部分删除剪贴板中文本的格式

部分删除剪贴板中文本的格式

我需要删除剪贴板中包含的文本格式,但保留一些元素。最重要的是“新线”角色。在一个简单的脚本中,效果如下

variable=$(xsel --clipboard)

问题是文本似乎都在同一行中,因此它丢失了所有“换行”字符。

1)有办法避免这种情况吗?有时我从 Windows 格式复制文本(因此换行符是“\r\n”),有时从 *nix 复制文本(因此换行符只是“\n”)。

2)上一个问题是最重要的,但是:还有一种方法可以保留“粗体”,“斜体”和“下划线”格式元素吗?因为这些 shell 命令也都丢失了。

不管怎样,谢谢你!

答案1

是的。命令替换会删除每个尾随换行符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

为了保留“粗体”...除了 UTF8 字符串之外,某些工具还将 CLIPBOARD 选择导出为 text/html。在这种情况下(使用最新版本的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一个例外是该系列的 shell,rc您可以说您不希望使用该var = ``(){xsel --clipboard}语法进行任何后处理。

相关内容