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

时间:2017-05-16 19:12:15

标签: bash 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

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

  • 从剪贴板中提取文本作为参数
  • 从头开始裁减+
  • 在开头添加geo:
  • xx.xxxx(无空格)
  • 之后添加geo:
  • ,(无空格)
  • 之后添加xx.xxxx
  • yy.yyyy(无空格)
  • 之后添加,
  • 从最后剪切/
  • ,0添加到结尾(无空格)
  • 将结果返回到剪贴板

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

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

1 个答案:

答案 0 :(得分:1)

这个oneliner基本上是你需要的:

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

说明:

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