蚊章汇 - 粘贴
type: channel
link: https://linuxcn.bwsl.wang/tag/%E7%B2%98%E8%B4%B4/
items: 使用 sed 命令进行复制、剪切和粘贴
items: 使用 xclip 在 Linux 命令行中复制粘贴

使用 sed 命令进行复制、剪切和粘贴
type: item
date: 2021-05-24T02:16:43+08:00
description: 了解 sed 的基本用法，然后下载我们的备忘单，方便快速地参考 Linux 流编辑器。很少有 Unix 命令像 sed、grep 和 awk 一样出名，它们经常组合在一起，可能是因为它们具有奇怪的名称和强大的文本解析能力。它们还在一些语法和逻辑上有相似之处。虽然它们都能用于文本解析，但都有其特殊性。本文研究 sed 命令，它是一个 流编辑器 stream editor 。我之前写过关于 sed 以及它的远亲 ed 的文章。要熟悉 sed，对 ed 有一点了解是有帮助的，因为这有助于你熟悉缓冲区的概念。本文假定你熟悉 sed 的基本知识，这意味着你至少已经运行过经典的 s/foo/bar 风格的查找和替换命令。下载我们的免费 sed 备忘录安装 sed如果你使用的是 Linux、BSD 或 macOS，那么它们已经安装了 GNU 的或 BSD 的 sed。这些是原始 sed 命令的独特重新实现。虽然它们很相似，但也有一些细微的差别。本文已经在 Linux 和 NetBSD 版本上进行了测试，所以你可以使用你的计算机上找到的任何 sed，但是对于 BSD sed，你必须使用短选项（例如 -n 而不是 --quiet）。GNU sed 通常被认为是功能最丰富的 sed，因此无论你是否运行 Linux，你可能都想要尝试一下。如果在 Ports 树中找不到 GNU sed（在非 Linux 系统上通常称为 gsed），你可以从 GNU 网站 下载源代码。 安装 GNU sed 的好处是，你可以使用它的额外功能，但是如果需要可移植性，还可以限制它以遵守 sed 的 POSIX 规范。MacOS 用户可以在 MacPorts 或 Homebrew 上找到 GNU sed。在 Windows 上，你可以通过 Chocolatey 来 安装 GNU sed。了解模式空间和保留空间sed 一次只能处理一行。因为它没有可视化模式，所以会创建一个 模式空间 pattern space ，这是一个内存空间，其中包含来自输入流的当前行（删除了尾部的任何换行符）。填充模式空间后，sed 将执行你的指令。当命令执行完时，sed 将模式空间中的内容打印到输出流，默认是 标准输出，但是可以将输出重定向到文件，甚至使用 --in-place=.bak 选项重定向到同一文件。然后，循环从下一个输入行再次开始。为了在遍历文件时提供一点灵活性，sed 还提供了 保留空间 hold space （有时也称为 保留缓冲区 hold buffer ），即 sed 内存中为临时数据存储保留的空间。你可以将保留空间当作剪贴板，实际上，这正是本文所演示的内容：如何使用 sed 复制/剪切和粘贴。首先，创建一个示例文本文件，其内容如下：Line one Line three Line two 复制数据到保留空间要将内容放置在 sed 的保留空间，使用 h 或 H 命令。小写的 h 告诉 sed 覆盖保留空间中的当前内容，而大写的 H 告诉 sed 将数据追加到保留空间中已经存在的内容之后。单独使用，什么都看不到：$ sed --quiet -e '/three/ h' example.txt $ --quiet（缩写为 -n）选项禁止显示所有输出，但 sed 执行了我的搜索需求。在这种情况下，sed 选择包含字符串 three 的任何行，并将其复制到保留空间。我没有告诉 sed 打印任何东西，所以没有输出。从保留空间复制数据要了解保留空间，你可以从保留空间复制内容，然后使用 g 命令将其放入模式空间，观察会发生什么：$ sed -n -e '/three/h' -e 'g;p' example.txt Line three Line three 第一个空白行是因为当 sed 第一次复制内容到模式空间时，保留空间为空。接下来的两行包含 Line three 是因为这是从第二行开始的保留空间。该命令使用两个唯一的脚本（-e）纯粹是为了帮助提高可读性和组织性。将步骤划分为单独的脚本可能会很有用，但是从技术上讲，以下命令与一个脚本语句一样有效：$ sed -n -e '/three/h ; g ; p' example.txt Line three Line three 将数据追加到模式空间G 命令会将一个换行符和保留空间的内容添加到模式空间。$ sed -n -e '/three/h' -e 'G;p' example.txt Line one Line three Line three Line two Line three 此输出的前两行同时包含模式空间（Line one）的内容和空的保留空间。接下来的两行与搜索文本（three）匹配，因此它既包含模式空间又包含保留空间。第三行的保留空…

使用 xclip 在 Linux 命令行中复制粘贴
type: item
date: 2019-07-12T19:46:55+08:00
description: 了解如何在 Linux 中使用 xclip。在使用 Linux 桌面工作时，你通常如何复制全部或部分文本？你可能会在文本编辑器中打开文件，选择全部或仅选择要复制的文本，然后将其粘贴到其他位置。这样没问题。但是你可以使用 xclip 在命令行中更有效地完成工作。xclip 提供了在终端窗口中运行的命令与 Linux 图形桌面环境中的剪贴板之间的管道。安装 xclipxclip 并不是许多 Linux 发行版的标准套件。要查看它是否已安装在你的计算机上，请打开终端窗口并输入 which xclip。如果该命令返回像 /usr/bin/xclip 这样的输出，那么你可以开始使用了。否则，你需要安装 xclip。为此，请使用你的发行版的包管理器。如果你喜欢冒险，你可以从 GitHub 获取源代码并自己编译。基础使用假设你要将文件的内容复制到剪贴板。在 xclip 中可以使用两种方法。输入：xclip file_name或者xclip -sel clip file_name两个命令之间有什么区别（除了第二个命令更长）？第一个命令在你使用鼠标中键粘贴的情况下有效。但是，不是每个人都这样做。许多人习惯使用右键单击菜单或按 Ctrl+V 粘贴文本。如果你时其中之一（我就是！），使用 -sel clip 选项可确保你可以粘贴要粘贴的内容。将 xclip 与其他应用一起使用将文件内容直接复制到剪贴板是个巧妙的技巧。很可能你不会经常这样做。还有其他方法可以使用 xclip，其中包括将其与另一个命令行程序结合。结合是用管道（|）完成的。管道将一个命令行程序的输出重定向到另一个命令行程序。这样我们就会有更多的可能性，我们来看看其中的三个。假设你是系统管理员，你需要将日志文件的最后 30 行复制到 bug 报告中。在文本编辑器中打开文件，向下滚动到最后，复制和粘贴有一点工作量。为什么不使用 xclip 和 tail) 来快速轻松地完成？运行此命令以复制最后 30 行：tail -n 30 logfile.log | xclip -sel clip我的写作有相当一部分用于内容管理系统 （CMS） 或者在其他网络中发布。但是，我从不使用 CMS 的 WYSIWYG 编辑器来编写 - 我采用 Markdown 格式离线编写纯文本。也就是说，许多编辑器都有 HTML 模式。通过使用此命令，我可以使用 Pandoc 将 Markdown 格式的文件转换为 HTML 并将其一次性复制到剪贴板：pandoc -t html file.md | xclip -sel clip在其他地方，粘贴完成。我的两个网站使用 GitLab Pages 托管。我使用名为 Certbot 的工具为这些站点生成 HTTPS 证书，每当我更新它时，我需要将每个站点的证书复制到 GitLab。结合 cat) 命令和 xclip 比使用编辑器更快，更有效。例如：cat /etc/letsencrypt/live/website/fullchain.pem | xclip -sel clip这就是全部可以用 xclip 做的事么？当然不是。我相信你可以找到更多用途来满足你的需求。最后总结不是每个人都会使用 xclip。没关系。然而，它是一个在你需要它时非常方便的一个小工具。而且，正如我几次发现的那样，你不知道什么时候需要它。等到时候，你会很高兴能用上 xclip。via: https://opensource.com/article/19/7/xclip作者：Scott Nesbitt 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出