Bash - 使用 xclip 更改复制到剪贴板的文本

Bash - change text copied to the clipboard using xclip

我正在尝试将复制到剪贴板的文本从以下内容转换为:

+50.8863-114.0157/

像这样:

geo:50.8927777778,-114.013055556,0

我在网上找到这段代码:

#!/bin/bash
x="geo:"$(xclip -o | tr -d ' ')
notify-send $x -i info
xclip -selection c

但它只是删除了白色 space。 我需要做的是: 剪贴板中有 +xx.xxxx-yy.yyyy/ 其中 xy 是数字 0 - 9


稍后添加 我自己想出来了。这是有效的代码:

clipboard_original="$(xclip -o)"
latitude=${clipboard_original:0:8}
longitude=${clipboard_original:8:9}
clipboard_for_digikam_geo=""geo:""${latitude//+}"00000,"${longitude//+}"00000"
echo "$clipboard_for_digikam_geo" | xclip -selection c
exit

这条内衬基本上就是您所需要的:

xclip -o | sed -rne's/\+?(-?[[:digit:].]+)\+?(-?[[:digit:].]+)\//geo:,,0/p' | xclip -i

解释:

  • xclip -o 将 X 选择输出到标准输出
  • sed <regex> 解析您提供的格式(忽略前导 +'es)并打印替换文本
    • -r 开关指示 sed 将正则表达式解释为 扩展正则表达式 (ERE)(快速介绍 here),
    • -n 抑制 (unmatched/unwanted) 输入的输出——因此我们必须使用 p 命令显式打印(sed 脚本中的最后一个字母)
    • -e script 定义 sed 脚本:
      • s/regexp/replacement/ 将在每行输入中匹配 regexp(仅第一次出现)并将其替换为 replacement(可以包括输入组,如 </code> ). sed 脚本中的 <code>p 实际上打印了替换文本。
      • regexp(简而言之)由两个相同的连续子模式组成:<optional +>(<optional -><one or more digits/dot>)。括号定义了我们在替换中使用的组。
  • xclip -i 从标准输入(sed 的输出)设置 X 选择