Reputation: 81
I am trying to convert text copied to the clipboard from something like this:
+50.8863-114.0157/
to something like this:
geo:50.8927777778,-114.013055556,0
I found this code on the Web:
#!/bin/bash
x="geo:"$(xclip -o | tr -d ' ')
notify-send $x -i info
xclip -selection c
but it just removes the white space.
What I need to do is:
having +xx.xxxx-yy.yyyy/
in clipboard
where x
and y
are numbers 0 - 9
+
from the beginninggeo:
in the beginningxx.xxxx
after geo:
(no spaces),
after xx.xxxx
(no spaces)yy.yyyy
after ,
(no spaces)/
from the end,0
to the end (no spaces)ADDED LATER I figured that out myself. Here is the code that worked:
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
Upvotes: 3
Views: 1134
Reputation: 18687
This oneliner is basically what you need:
xclip -o | sed -rne's/\+?(-?[[:digit:].]+)\+?(-?[[:digit:].]+)\//geo:\1,\2,0/p' | xclip -i
Explanation:
xclip -o
outputs the X selection to the standard outputsed <regex>
parses the format you gave (ignoring leading +
'es) and prints the replacement text
-r
switch instructs the sed
to interpret regular expressions as Extended Regular Expressions (ERE) (quick intro here),-n
suppresses the output of (unmatched/unwanted) input -- so we have to explicitly print with the p
command (the last letter in sed script)-e script
defines the sed script:
s/regexp/replacement/
will match regexp
in each line of input (only the first occurrence) and replace it with replacement
(which can include input groups, like \1
). The p
in the sed script actually prints the replacement text.<optional +>(<optional -><one or more digits/dot>)
. Parentheses define a group which we use in the replacement.xclip -i
sets X selection from stdin (sed's output)Upvotes: 2