在 bash 中的剪贴板内容中将每次出现的华氏温度转换为摄氏温度

Convert every occurence of Fahrenheit to Celsius in the clipboard content in bash

真实示例文本:

Mealworms do reproduce in temperatures ranging from 65-100 F, but temperatures above 86 º F negatively impact growth and development (inhibiting pupation). The duration of the pupal stage will depend on temperature. It is six days at 91.4 º F, seven days at 80.6 ºF, ten days at 75.2º F and thirteen days at 69.8 °F.

运行执行脚本后,剪贴板内容应如下所示:

Mealworms do reproduce in temperatures ranging from 18.3-37.8°C, but temperatures above 30.0°C negatively impact growth and development (inhibiting pupation). The duration of the pupal stage will depend on temperature. It is six days at 33.0°C, seven days at 27°C, ten days at 24°C and thirteen days at 21°C.

带有一些可能组合的示例文本:

100 F
50-100 F
50 - 100 F
50.5 - 100.22 F

100.22F
100.22°F
100.22 °F
100.22 ° F

100.22ºF
100.22 ºF
100.22 º F

我将 运行 脚本作为系统范围的快捷方式,因此按 CTRL+SHIFT+ 我会在剪贴板的内容上调用此脚本,并可能在弹出文本框中显示转换后的内容。

更新: 使用@Bertrand Martel 的答案用作快捷方式的最终脚本是:

/usr/bin/xclip -selection c -o | /usr/bin/perl -pe's/([0-9]*\.?[0-9]+)(\s?(°|º)?\s?F)/sprintf("%.1f°C", (-32)*1\/1.8)/eg; \
s/([0-9]*\.?[0-9]+)(-| - )([0-9]*\.?[0-9]+)°C/sprintf("%.1f°C",(-32)*1\/1.8)/eg' | /usr/bin/xclip -selection c -i && /usr/bin/zenity --info --text="$(/usr/bin/xclip -selection c -o)" --timeout 5

当快捷方式被触发时,脚本会将剪贴板中的文本中每次出现的华氏度都转换为摄氏度。然后使用转换后的值更新剪贴板,内容在弹出窗口中显示 window 5 秒。

您可以使用 Perl 提取您的浮点数并用转换结果替换每个出现的位置:

perl -pe's/([0-9]*\.?[0-9]+)(\s?(°|º)?\s?F)/sprintf("%.1f°C", (-32)*1\/1.8)/eg; \
s/([0-9]*\.?[0-9]+)(-| - )([0-9]*\.?[0-9]+)°C/sprintf("%.1f°C",(-32)*1\/1.8)/eg' text.txt

然后您可以使用 Linux 上的 xclip、Windows 上的 clip 或 MAC 上的 pbcopy 将结果复制到剪贴板OS :

perl -pe's/([0-9]*\.?[0-9]+)(\s?(°|º)?\s?F)/sprintf("%.1f°C", (-32)*1\/1.8)/eg; \
s/([0-9]*\.?[0-9]+)(-| - )([0-9]*\.?[0-9]+)°C/sprintf("%.1f°C",(-32)*1\/1.8)/eg' text.txt | xclip