热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

用CAT合并文件--认识您的文本实用程序

文章标题:用CAT合并文件--认识您的文本实用程序。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  在我们有关 GNU 文本实用程序的连续系列中,Jacek Artymiak 对 cat 做了一下研究 — cat 这个命令是 UNIX 爱好者所热爱的,也是厌恶 UNIX 的人所憎恶的。
  
  您常常需要将几个文件处理成一个文件并将这种处理的结果保存到一个单独的输出文件。cat(“concatenate”的缩写)命令在其输入上接受一个或多个文件并将它们作为一个单独的文件打印到它的输出。例如,cat chapter01 chapter02 chapter03 > book 将三个 chapterXX 文件保存在一个单独的 book 文件中。
  
  输入文件按照它们在 cat 命令后的排列顺序被打印,因此,要调换信息的顺序,就必须先调换输入文件的顺序。此外,当需要处理的文件数目对于您来说过大而无法手工输入这些文件的名称时,您可以使用通配符,如在 cat chapter* > book 中使用的那样,记住,文件名将会按升序排列。当您突然发现 chapter13 被发送到输出中时会在 chapter2 之前,而会在 chapter02 之后时,这会引起很有意思的问题。
  
  当 cat 的输出没有被重定向到一个文件或另一个命令的标准输出时,cat 表现出来的行为与多数命令行工具一样,即将其输出发送到控制台。这意味着您可以使用 cat 来显示文件;例如,您可以使用 cat /etc/passwd 来显示系统密码文件的内容。为方便起见,您应该用 less 查看大文件,如在 less /etc/passwd 中那样(您可以通过输入 man less 学习更多关于 less 的知识)。
  
  尽管 cat 主要用于合并文件,您还可以将它用于输入的简单自动处理。例如,您可以使用一个单独的空白行来除去多行空白行(使用 -s 选项),这是一个在您将源代码公诸于世前进行清除工作的好办法。遗憾的是,cat 并没有用于一次清除所有空白行的选项。但这并不是什么大问题,因为您可以使用方便的 sed 命令将这些空白行除去:
  
  清单 1. 使用 sed 与 cat 除去空白行
  $ cat -s /etc/X11/XF86Config | sed '/^[[:space:]]*$/d'
  ...
  # Multiple FontPath entries are allowed (they are concatenated together)
  
  # By default, Red Hat 6.0 and later now use a font server independent of
  
  # the X server to render fonts.
  
    FontPath  "/usr/X11R6/lib/X11/fonts/TrueType"
  
    FontPath  "unix/:7100"
  
  EndSection
  ...
  对于读取配置文件和 HTML 页面的源文件,特别是那些由脚本生成的插入了不必要新行的源文件,以及那些包含大型条件结构(其各个项之间已经用空行分开)的源文件来说,空白行紧缩是一个方便的技巧。
  
  cat 的另外一个重要的功能是它可以对行进行编号。这种功能对于程序文档的编制以及法律和科学文档的编制很方便。打印在左边的行号使得参考文档的某一部分变得容易。这在编程、科学研究、业务报告或甚至是立法工作中都是非常重要的。对行进行编号功能有两个选项:-b 选项(只能对非空白行进行编号)和 -n 选项(可以对所有行进行编号):
  
  清单 2. 对行进行编号
  $ cat -b /etc/X11/XF86Config
  
  ...
  
  
    14 # Multiple FontPath entries are allowed (they are concatenated together)
  
    15 # By default, Red Hat 6.0 and later now use a font server independent of
  
    16 # the X server to render fonts.
  
    17   FontPath  "/usr/X11R6/lib/X11/fonts/TrueType"
  
    18   FontPath  "unix/:7100"
  
    19 EndSection
  ...
  $ cat -n /etc/X11/XF86Config
  ...
    20 # Multiple FontPath entries are allowed (they are concatenated together)
  
    21 # By default, Red Hat 6.0 and later now use a font server independent of
  
    22 # the X server to render fonts.
  
    23 
  
    24   FontPath  "/usr/X11R6/lib/X11/fonts/TrueType"
  
    25   FontPath  "unix/:7100"
  
    26 
  
    27 EndSection
  
  ...
  
  cat 还可以在您查看包含如制表符这样的非打印字符的文件时起帮助作用。您可以用以下选项来显示制表符:
  
  -T 将制表符显示为 ^I
  -v 显示非打印字符,除了换行符和制表符,它们使用各自效果相当的“控制序列”。例如,当您处理一个在 Windows 系统中生成的文件时,这个文件将使用 Control-M(^M)来标记行的结束。对于代码大于 127 的字符,它们的前面将会被加上 M-(表示“meta”),这与其它系统中在字符前面加上 Alt- 相当。
  -E 在每一行的结束处添加美元符($)。
  
  清单 3. 显示非打印字符
  $ cat -t /etc/X11/XF86Config
  ...
  
  # Multiple FontPath entries are allowed (they are concatenated together)
  
  # By default, Red Hat 6.0 and later now use a font server independent of
  
  # the X server to render fonts.
  
  ^IFontPath^I"/usr/X11R6/lib/X11/fonts/TrueType"
  
  ^IFontPath^I"unix/:7100"
  
  EndSection
  ...
  $ cat -E /etc/X11/XF86Config
  ...
  
  # Multiple FontPath entries are allowed (they are concatenated together)$
  
  # By default, Red Hat 6.0 and later now use a font server independent of$
  
  # the X server to render fonts.$
  
  $
  
    FontPath  "/usr/X11R6/lib/X11/fonts/TrueType"$
  
    FontPath  "unix/:7100"$
  $
  
  EndSection$
  
  ...
  
  $ cat -v /etc/X11/XF86Config
  ...
  
  ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@M-|M-8^X^@^@^@
  
  P^@^O"M-X^O M-@^M^@^@^@M-^@^O"M-@M-k^@M-8*^@
  
  @M-^H$M-@M-9|A(M-@)M-yM-|M-sM-*M-hW^A^@^@j^@
  
  M-|M-sM-%1M-@M-9^@^B^@^@M-sM-+fM-^A= ^@ ^@
  
  F^@^@  ^@M-9^@^H^@^@M-sM-$M-G^E(l!M-@M-^?
  
  ^IM-A5^@^@^D^@PM-^]M-^\X1M-H%^@^@^D^@tyM-G
推荐阅读
  • 面试算法题:字符串空格替换
    本题要求实现一个函数,该函数能够将给定字符串中的所有空格字符替换为特定编码‘%20’。假设输入字符串具有足够的空间来容纳替换后的字符,并且只能在原有字符串上直接进行修改。 ... [详细]
  • 在使用如新浪微博和腾讯微博等平台的Python API时,发现了一种将字典转换为函数参数的有效方法,即通过在字典前添加双星号(*)来实现动态变量的传递。这种方法不仅提高了代码的灵活性,也简化了API调用过程。 ... [详细]
  • CentOS系统下设置JDK环境变量的方法
    本文将详细介绍如何在CentOS系统中为root用户配置JDK环境变量。包括JDK的安装路径设定、环境变量的添加及验证方法。 ... [详细]
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • ArcGIS技巧:为相邻地块创建指定宽度的隔离带
    在地理信息系统(GIS)的数据处理中,为了满足特定项目的质量检查标准,需要在相邻地块之间创建一定宽度的隔离带。本文将探讨如何使用ArcGIS工具解决这一问题,确保不同地块图斑间保持规定的最小距离。 ... [详细]
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
  • Java 动态代理详解与示例
    本文详细介绍了Java中的动态代理机制,包括如何定义接口、实现类和代理处理器,并通过具体示例演示了动态代理的创建和使用过程。 ... [详细]
  • CSGO
    CSGOTimeLimit:40002000MS(JavaOthers)MemoryLimit:524288524288K(JavaOthers)ProblemDescriptio ... [详细]
  • 本文详细介绍了在PHP中如何创建新文件以及如何使自定义函数在整个项目中全局可用的方法,包括最新的实践技巧。 ... [详细]
  • 解决Android开发中的TextView难题
    探讨了在Android开发过程中遇到的关于TextView组件的常见问题,特别是如何实现多行文字的跑马灯效果,并提供了初步的解决方案和参考资料。 ... [详细]
  • Only2 Labs 是一家专注于视觉设计的工作室,如果您对当前的设计感到不满,或者急需寻找一个可靠的设计合作伙伴,甚至是您的团队项目需要专业指导,Only2 Labs 都将竭诚为您提供帮助。 ... [详细]
  • 本文探讨了Windows Presentation Foundation (WPF)如何通过扩展Microsoft Build Engine (MSBuild)来增强其构建能力,特别是在处理WPF特有的任务时。 ... [详细]
  • Java基础概念与核心特性解析
    本文深入探讨了Java编程语言的基本特点,包括其简洁性、面向对象设计、跨平台能力以及多线程支持等关键特性。此外,文章还详细分析了JVM、JDK和JRE之间的区别,并讨论了字节码的概念及其优势。 ... [详细]
  • 在Win7系统中手动为EditPlus 2添加右键快捷菜单的方法
    本文介绍如何在Windows 7操作系统中,通过注册表编辑器为EditPlus 2文本编辑器添加右键快捷菜单项,以提高日常编辑工作的效率。 ... [详细]
  • MySQL查询最新记录的方法详解
    本文详细介绍了如何在MySQL数据库中查询最新的单条记录,包括基本的SQL语句使用技巧以及针对特定场景的高级查询方法。 ... [详细]
author-avatar
o筱灵丹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有