linux tac命令

tac命令本质上是cat命令,但其目的是反向连接文件。 像 ,它有一个方便的回退模式打印到如果没有提供输出文件标准输出 (STDOUT),使其成为更经常用作懒惰类似寻呼机以下 -than它是函数的那些命令中的一个命名。

cat命令经常被过度使用和滥用,而tac通常被当作ddatecowsay之类的玩笑命令。 愚人节的文章中经常会详细介绍愚蠢的终端技巧。 因此, TAC实际上有一个合理的理由存在可能令人惊讶。

这实际上是一个有用的命令。

TAC的目的是什么?

tac手册页在描述其自身功能方面做得很差:

 Write each FILE to standard output, last line first. 

按照该语句编写的内容, tac应该打印文件的最后一行,然后从第一行开始打印文件:

$ cat metasyntactic.list
foobar
foo
bar
baz

$ tac metasyntactic.list
baz
foobar
foo
bar


但这不是它的作用。 它的信息页面更加清晰:

copies each FILE (‘-’ means standard input),
or standard input if none are given,
to standard output, reversing the records
(lines by default) in each separately.

例如:

$ tac metasyntactic.list
baz
bar
foo
foobar

忽略了tac可以为您提供反向功能的事实,它具有一些令人惊讶的有用和独特的选择。

TAC和分隔符

如信息页面所示,该文件不必用行分隔,这意味着tac对于CSV文件同样有效。 您可以使用--separator-s选项以及文件中使用的分隔符来定义文件的分隔符。

对于CSV文件,该字符可能是逗号( ),但是您可以定义任何字符。 但是,如果文件没有以分隔符结尾,那么您将得到意外的结果:

$ tac --separator = "," metasyntactic.csv
bazbar,foo,foobar

前两个项目之间没有分隔符。 文件的最终记录(在最终分隔符之后的字符串,在此情况下为逗号)本身并不后面跟逗号,因此tac将其视为非记录。 要解决此问题,请使用--before-b选项,该选项将分隔符放在每个记录之前:

$ tac --separator = "," --before metasyntactic.csv
baz,bar,foo,foobar

分隔符不必是单个字符。 它也可以是正则表达式(regex)。

TAC和正则表达式

regex的完整说明不在本文讨论范围之内,但是值得一提的是,扩展POSIX通过环境变量来支持。 扩展的正则表达式极大地提高了正则表达式的可读性,并且为了简单起见,这就是本示例所使用的。 假设您有一个文件,其中包含所有用整数分隔的字符串:

$ cat metasyntactic.txt
foobar123foo456bar789baz898

要在tac命令中使用regex,请在--separator定义之前使用--regex-r选项。 另外,除非已经在您的环境中设置了它,否则您必须激活REG_EXTENDED环境变量。 您可以将此变量设置为除零之外的任何值以激活它,并且可以通过所有常用方法进行操作:

  • 导出您正在使用的Shell会话的变量。
  • 在外壳程序配置文件(例如〜/ .bashrc )中设置环境变量。
  • 将环境变量添加到tac命令(使用Bash,Zsh等格式)之前,如下例所示:
$ REG_EXTENDED = 1 tac --regex \
--separator = '[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1

regex选项不能很好地处理非终止记录,即使使用--before选项也是如此 。 如果该功能对您很重要,则可能需要调整源文件。

何时使用TAC

这些简单而有用的解析选项使tac值得作为简单,极简的解析命令使用。 对于那些不太值得为其编写AWK或Perl表达式的简单工作, tac可能是一个明智的解决方案。

显然, tac命令是受限制的,因为它除了逆转记录外不会以任何其他方式操作记录。 但这有时是您唯一需要的列表操作。

例如,如果您要打包分发软件,通常会列出安装所需的依赖项。 根据您收集此列表的方式,可以按照建立依赖关系所需的顺序(而不是必须安装它们的顺序)来获取它。

这种做法相对普遍,因为编译器错误首先触及到高级依赖项。 也就是说,如果您的系统缺少libavcodec,则GCC会停止并向您发出警报; 但是由于GCC尚未有机会例如针对libvorbislibvpx探测您的系统,因此它无法告诉您这些依赖项也丢失了(并且通常要求在编译libavcodec之前在系统上存在这些依赖项)。

因此,当您发现系统需要哪些库来构建库所需的库(依此类推)时,依赖性列表将以自顶向下的形式增长。 在此过程结束时, tac是反转该列表的快速简便的方法。

另一个常见的烦恼是日志文件。 条目通常附加到日志文件中,因此管理员可以使用tail查看最新错误。 效果很好,但是有时您想看到条目的“块”,却不知道需要走多远。 通过tac命令传递给更少更多的命令,会将最新条目置于屏幕顶部。

最后,对于给定的部分,许多配置文件没有明确的终止标记。 您可以查找awksed命令以设计一种方法来确定配置文件中的块何时结束,或者可以使用tac反转顺序,以便一旦解析器在该块中找到第一个相关条目,它也知道什么时候停止读取,因为以前是页眉,现在是页脚。

交会

tac还有很多其他大用途,并且可能有很多原因使得tac太基本, 无法解决 。 您的系统可能已经安装它,然而,记住这个命令,下一次你发现在你的工作流程优势的情况下,真正真正需要在TAC反向糟透了。

翻译自: https://opensource.com/article/19/9/tac-command

linux tac命令

linux tac命令_Linux tac命令入门相关推荐

  1. linux 指令tftp传输文件_tftp命令_Linux tftp 命令用法详解:在本机和tftp服务器之间使用TFTP协议传输文件...

    tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件. TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:一是linux服 ...

  2. find linux 指定后缀_Linux终端命令入坑必备知识与技巧

    才接触Linux系统,一些概念简直是一头雾水,那么本文的目的就是在Linux中使用终端输入命令时,常见的一些概念及技巧. 1 什么是主目录(home directory)?Linux是一个典型的多用户 ...

  3. linux 修改文件名_Linux常用命令

    Linux下一切皆文件 查看型 ls 查看当前文件夹内容 选项 -a 查看隐藏文件 -l 查看文件详细信息 pwd 查看当前所在路径 su 切换用户 cat /etc/passwd 查看当前系统的用户 ...

  4. linux 目录命令_Linux目录命令能力问题和解答

    linux 目录命令 This section contains Aptitude Questions and Answers on Linux Directory Commands. 本节包含有关L ...

  5. linux 截取列_Linux 常用命令汇总

    Linux命令太多,主要写写自己平时使用频率较高的常用命令,内容是自己的笔记内容,所以整个逻辑看起来会比较乱.每条认真看,看完会有收获哦. 文中会出现大部分的伪代码,只是帮助自己记忆的. 1.LINU ...

  6. linux tee命令_Linux tee命令示例

    linux tee命令 In this article, we shall go through the tee command in Linux. This is commonly used to ...

  7. linux date命令_Linux date命令示例

    linux date命令 Unix/Linux date command is a command used for displaying the system's date and time. In ...

  8. java linux常用命令_Linux常用命令

    一.注销,关机,重启 注销系统的logout命令 1,Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]# ...

  9. linux常用命令_Linux常用命令总结

    点击上方"菜鸟名企梦",选择"置顶或者星标" 你关注的就是我关心的! 来源:Linux爱好者 ID:LinuxHub Linux常用命令 目录操作命令 ls 命 ...

  10. linux su命令_Linux Su命令示例教程

    linux su命令 The su short for substitute super user command using to change currently logged user.  Th ...

最新文章

  1. Java排序算法(1)
  2. python编程爱心-如何用python画爱心
  3. 离线轻量级大数据平台Spark之MLib机器学习库朴素贝叶斯实例
  4. python观察日志(part3)--绘制科赫雪花图
  5. 哪些行业形势好?大数据帮你预测今年就业“风口”
  6. 7-278 求幂级数展开的部分和 (20 分)
  7. LG卖楼进行时:价值87.7亿元的双子座大厦将出手
  8. vs发布项目webconfig替换语法
  9. 阿甘博客文章写法与教学方法
  10. Redis教程:主从复制
  11. [大数据之Spark]——Transformations转换入门经典实例
  12. window 下 go lang 环境变量一键批处理设置
  13. python类方法和静态方法_Python 中的方法、静态方法(static method)和类方法(class method)...
  14. 【bat】 计算机清理原理,使用bat脚本清理系统垃圾的方法
  15. django 文档参考模型
  16. webpack 处理网页小图标favicon
  17. mysql将数字月份替换成文月份_mysql必知必会--使用数据处理函数
  18. 计算机专业认知教育,计算机学院 “专业认知教育和学业规划教育”讲座顺利举行...
  19. 微信小程序上传多张图片
  20. Springboot 自定义身份证验证注解

热门文章

  1. 装饰器模式Decorate
  2. Flask 中 AssertionError: View function mapping is overwriting an existing endpoint function: decorate
  3. 如何让客户接受你的价格比别人更高?
  4. RuntimeError: Cannot re-initialize CUDA in forked subprocess.
  5. [java 手把手教程][第二季]java 后端博客系统文章系统——No7
  6. vue2.x和3.x中mock数据方式
  7. 论文阅读: Anomaly Detection with Partially Observed Anomalies
  8. 阿里云服务器安装宝塔流程
  9. 力扣多线程练习----交替打印FooBar---打印零与奇偶数
  10. Android 获取/设置:窝蜂移动数据网络状态