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
每次我在 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