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/
其中 x
和 y
是数字 0 - 9
- 从剪贴板中提取文本作为参数
- 从头开始剪
+
- 开头加
geo:
- 在
geo:
之后添加xx.xxxx
(没有spaces)
- 在
xx.xxxx
之后添加,
(没有spaces)
- 在
,
之后添加yy.yyyy
(没有spaces)
- 从结尾删
/
- 在最后加上
,0
(没有spaces)
- return结果到剪贴板
稍后添加
我自己想出来了。这是有效的代码:
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 选择
我正在尝试将复制到剪贴板的文本从以下内容转换为:
+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/
其中 x
和 y
是数字 0 - 9
- 从剪贴板中提取文本作为参数
- 从头开始剪
+
- 开头加
geo:
- 在
geo:
之后添加xx.xxxx
(没有spaces) - 在
xx.xxxx
之后添加,
(没有spaces) - 在
,
之后添加yy.yyyy
(没有spaces) - 从结尾删
/
- 在最后加上
,0
(没有spaces) - return结果到剪贴板
稍后添加 我自己想出来了。这是有效的代码:
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 选择