perl 在粘贴前修改剪贴板

perl to modify clipboard before pasting

每次我在 Kindle 应用程序中复制一些文本时,复制的内容总是附加一些额外的东西,比如 (Kindle Location 155). Icon Books. Kindle Edition. 和空行。

我想删除这些不相关的信息,然后再将其粘贴到其他地方。 例如这是模仿 Kindle 应用程序复制结果的剪贴板可能输入之一(注意 Kindle Edition. 末尾的 space 字符):

without

Mark Forsyth. The Etymologicon (Kindle Location 4047). Icon Books. Kindle Edition. 

剪贴板的预期输出应该是(空白行也应该被删除):

without

我已经使用 grep 搜索并尝试过类似的方法,它有效: pbpaste | grep -v -e'Kindle Edition. $' -e '^\s+$' | pbcopy

在perl中,有没有类似的东西可以达到同样的目的?像这样:

pbpaste | perl -Mutf8::all -E’$_ =~ s/Kindle Edition. $|^\s+$//mg; print $_' | pbcopy

这个好像不行。

你什么都没读。你的模式有错误。看起来您正在尝试删除文件中的任何内容,而不是仅在末尾。

-n(由-p暗示)一次读取一行输入,对每一行执行程序。但是,删除位于文件末尾的匹配项的最简单方法是一次读取整个输入。 -0777 将定义一行作为整个文件,因此我们将使用它。

pbpaste | perl -0777pe's/^\n.* Kindle Edition\.\s*\z//mg' | pbcopy

测试:

$ cat a; echo END
foo

bar

Mark Forsyth. The Etymologicon (Kindle Location 4047). Icon Books. Kindle Edition.
END

$ perl -0777pe's/^\n.* Kindle Edition\.\s*\z//mg' a; echo END
foo

bar
END