使用 shell 命令删除换行符(必须在 KDE 全局快捷方式中工作)

使用 shell 命令删除换行符(必须在 KDE 全局快捷方式中工作)

我需要一个快捷方式来从当前选择的文本中删除换行符。我想将我的命令放入 KDE 全局快捷方式中,我已经知道该怎么做。我想出的命令是:

sh -c 'xclip -o -sel p | tr -d "\-\n"  | tr "\n" "\ " | xclip -sel c; xdotool key --clearmodifiers ctrl+v'

其目的是获取当前选择并将其通过管道tr删除行尾连字符(并连接片段),然后用空格替换剩余的换行符,然后将其放入剪贴板并粘贴(无论焦点在哪里) )。

问题:它没有用空格替换换行符 tr "\n" "\ "。它没有这样做,而是什么都不替换换行符。我尝试了各种空间表现形式,但没有一个有效

我尝试过xdotool type,但这会吃掉所有空白并一起运行所有内容,即使不使用tr.

我更愿意使用选择(主要或次要)而不是剪贴板,并且如果可能的话不必使用xdotool key ctrl+v。如果我可以xdotool完全避免,因为根据我的经验,它处理空白的方式是意想不到的,那就更好了。

我还没有xvkbd安装,而且我不想安装它。但是,如果有帮助,我可以安装复制q,python-pyperclip, 或者xorg-x剪贴板。我还可以考虑主 Arch 存储库中的其他工具。

答案1

这是我想出的:

sh -c 'xclip -o -sel p | perl -p -e "s/-\n//g"|  tr "\n" " "| xclip -sel c; xdotool key --clearmodifiers ctrl+v'

我用 perl 替换了第一个tr。我意识到将tr序列-\n视为两个独立的字符而不是字符串。

我在这里找到了 perl 建议:
https://stackoverflow.com/a/7697604/463994

可能有一种方法可以使用单个 perl 命令来完成此操作,但我不知道。我会接受更好的答案。

编辑:这是更好的解决方案,感谢 Rakesh Sharma(见评论):

sh -c 'xclip -o -sel p | perl -pe "s/-\n// || s/\n/ /" | xclip -sel c; xdotool key --clearmodifiers ctrl+v; xdotool key Alt'

我添加是xdotool key Alt因为我有绑定到 Alt 键组合的快捷方式,并且需要清除 Alt 键。

相关内容