如何利用xsel将选中的多行文本合并为单行且兼容单行场景
xsel选中文本多余换行合并单行解决方案
日常选中段落内容后通过xsel获取选中文本时,输出常带有多余换行、空行呈现多行形态,需要将其转换为无多余换行的单行形态,同时兼容本身就是单行的输出场景,不对单行内容做额外修改。
方案1:paste命令极简实现(推荐)
直接使用paste原生的行拼接能力即可实现需求,命令如下:
xsel | paste -s -d ' ' -
参数说明:
-s:将输入的所有行按顺序拼接为单行-d ' ':指定行之间的拼接分隔符为单个空格- 若输入本身为单行,该命令不会做任何修改,完美兼容单行场景
方案2:tr+sed组合实现(自定义程度高)
如果需要额外调整空格、空白规则,可以使用管道组合命令:
xsel | tr '\n' ' ' | sed -e 's/[ ]\+/ /g' -e 's/^ *//' -e 's/ *$//'
各部分作用:
tr '\n' ' ':将所有换行符替换为空格sed 's/[ ]\+/ /g':合并连续的多个空格为单个空格,同时清空空行转换产生的多余空格- 首尾空格去除规则可根据需求自行增删,原本为单行的内容不会被修改
常用配置
可以将命令写入shell配置文件(/.bashrc、/.zshrc等)设置别名,方便快速调用:
alias xsel-line="xsel | paste -s -d ' ' -"
配置生效后直接执行xsel-line即可直接得到合并后的单行选中文本。如果需要将处理后的内容直接写回剪切板,可修改命令为:
alias xsel-line="xsel | paste -s -d ' ' - | xsel -b"
内容的提问来源于stack exchange,提问作者an0nhi11
相关产品推荐
相关产品推荐

