我正在尝试将复制到剪贴板的文本转换为以下内容:
+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/
其中x
和y
是数字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
答案 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
实际打印替换文本。<optional +>(<optional -><one or more digits/dot>)
。括号定义了我们在替换中使用的组。xclip -i
从stdin(sed&#39; s输出)