如何用Perl清理剪贴板中Kindle复制内容的多余信息后粘贴
你写的Perl命令存在两个核心问题:
- 正则里的
.没有转义,.在正则语法中是通配符,会匹配任意字符,不符合精确匹配Kindle Edition.的需求 - 你用的是内容替换逻辑,仅把匹配到的内容替换为空,不会删除整行,所以处理后会残留多余空行,达不到
grep -v过滤掉整行的效果
正确实现(和你用的grep逻辑完全一致)
pbpaste | perl -Mutf8::all -ne 'print unless /Kindle Edition\.\s*$/ || /^\s*$/' | pbcopy
逻辑说明:
-n参数会让Perl逐行遍历输入内容,自动将每行内容赋值给默认变量$_- 规则和
grep -v完全匹配:只有当前行既不是末尾带Kindle Edition.的引用来源行,也不是全空白的空行时,才会打印输出 - 正则里的
\s*兼容末尾可能存在的多个空格、制表符等空白字符,适配性更强
如果你坚持要用替换模式实现,也可以参考以下写法:
pbpaste | perl -Mutf8::all -0777 -E '$_ =~ s/^\s*$|.*Kindle Edition\.\s*$//mg; s/\n+/\n/g; print $_' | pbcopy
这里加了-0777参数一次性读取全部输入,替换完匹配内容后再把连续多个换行合并为单个,也能达到预期效果。
内容的提问来源于stack exchange,提问作者jonah_w
相关产品推荐
相关产品推荐

