V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AaronWxt
V2EX  ›  程序员

比 cat 更好用的命令了解一下?

  •  
  •   AaronWxt · 2018-06-04 08:46:49 +08:00 · 7620 次点击
    这是一个创建于 2366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为程序员经常使用命令行来进行一些文件的处理,比如常见的:gitvim ,以及不同语言下的一些命令等。那么这么多的命令中,相信你肯定有用过cat命令用来查看文件的内容,但是这个命令仅仅只能将文本展示出来,并不会很好的辅助我们阅读和理解里面的内容,尤其是文件中内容为 代码时,看起来就特别的痛苦了。那么这篇文章就要介绍更好命令来替代 cat命令,它就是bat命令。(不是 windows 中的那个脚本哟)

    bat 介绍

    bat 是一个语法高亮显示和Git集成的cat高级版本,也就是说,batcat的所有功能,且已经集成了代码高亮,和git版本管理的工具,并且会对过长的文件进行自动分页,不会像 cat 一样全部一次打印,先来看张效果图:

    bat 安装

    安装的方法也是超级的简单,具体安装如下:

    • Linux 上
    git clone https://aur.archlinux.org/bat.git
    cd bat
    makepkg -si
    
    • MACOS 上
    brew install bat
    

    安装完成后,输入bat -help 看下是否会出现相关的提示信息,来确认是否安装成功。

    bat 使用

    使用与 cat 类似,在 bat 后面紧跟文件 就行了, 也可以同时打开过个,但结果是以一个接一个展示出来。

    如打开一个有 git 管理的文件,会展示出文件中添加与删除的部分,如下图所示:

    如果需要制定文件中高亮的语言,可以使用 -l 参数来制定语言,例如: bat ./test.json -l json 则指定文件中高亮为 json 模式,当然不指定也没有问题,默认会自动识别。 总之使用还是比较简单,一点都不复杂。

    总结

    如果有了这个命令,我想一般都不会再用 cat命令了,但每次敲命令都习惯使用 cat 了, 那么建议将 cat 命令使用 alias cat= 'bat' 将其指定为 bat 这样就可以使用cat 命令,而达到 bat 的使用效果。

    希望大家能够喜欢这篇文章,喜欢就分享出去吧。 如果你有更好的命令,欢迎留言交流。

    欢迎大家关注我的公众号: 技术特工队

    46 条回复    2018-12-05 18:51:40 +08:00
    lonccc
        1
    lonccc  
       2018-06-04 09:11:15 +08:00 via Android
    待会试试
    fan123199
        2
    fan123199  
       2018-06-04 09:28:24 +08:00
    ubuntu 怎么装? 显示 makepkg not found.
    widewing
        3
    widewing  
       2018-06-04 09:31:08 +08:00 via Android   ❤️ 3
    那干嘛不用 vim 呢。。cat 主要是管道中用吧
    xiaket
        4
    xiaket  
       2018-06-04 09:31:38 +08:00
    之前看过,不过这样打印出来的内容不方便复制,所以仍然用 pygmentize 来彩色输出代码.
    jasonyang9
        5
    jasonyang9  
       2018-06-04 09:32:53 +08:00   ❤️ 1
    这玩意符合 Linux 哲学么?
    LeungV2
        6
    LeungV2  
       2018-06-04 09:36:27 +08:00
    经常用 cat 弱弱的问一句 我直接在我命令行
    git clone https://aur.archlinux.org/bat.git 也行嘛。。
    twor2
        7
    twor2  
       2018-06-04 09:37:08 +08:00 via iPhone
    ccat 了解一下
    yanaraika
        8
    yanaraika  
       2018-06-04 09:37:32 +08:00 via Android   ❤️ 1
    cat | pygmentize 了解一下
    muziki
        9
    muziki  
       2018-06-04 09:38:56 +08:00
    已经用了很长一段时间了,比 cat 好太多
    0x338
        10
    0x338  
       2018-06-04 09:41:16 +08:00 via Android
    @fan123199 那是 Arch Linux 的安装方式
    prolic
        11
    prolic  
       2018-06-04 09:43:25 +08:00 via Android
    没有 dog 么?
    agagega
        12
    agagega  
       2018-06-04 09:47:05 +08:00
    @jasonyang9 ripgrep 乃至 git 也不符合吧?时代变了...
    ReinWD
        13
    ReinWD  
       2018-06-04 09:48:16 +08:00
    第一反应是一个没有窗口的终端 sublime like 阅读工具
    在管道,脚本里应该不如 cat 好用
    日常使用替换 cat 讲道理是没问题的
    muziki
        14
    muziki  
       2018-06-04 09:48:58 +08:00
    @yanaraika 还是不够看
    fan123199
        15
    fan123199  
       2018-06-04 09:54:52 +08:00   ❤️ 1
    https://github.com/sharkdp/bat 替 lz 补一个原 repo 的链接,有不同发行版的安装方式。
    huskar
        16
    huskar  
       2018-06-04 09:56:48 +08:00   ❤️ 1
    alias cat= 'bat'???这个工具和 cat 干的完全不是一件事吧,肉眼可读性本来就不是 cat 的目标。
    jason2017
        17
    jason2017  
       2018-06-04 09:56:54 +08:00   ❤️ 1
    现在这些奇奇怪怪的命令,真的就是业余的时候玩玩,或者新学 linux 的会尝试用用。
    基本上正常公司企业级开发的,都不会搞这东西,一是不稳定,二是不能保证安全性,三是更变习惯很成本很大。
    LeungV2
        18
    LeungV2  
       2018-06-04 09:57:45 +08:00
    @fan123199 makepkg not found. 解决了?
    UnknownR
        19
    UnknownR  
       2018-06-04 09:58:03 +08:00
    dog 了解一下
    Love4Taylor
        20
    Love4Taylor  
       2018-06-04 10:01:10 +08:00
    @fan123199 #2 https://github.com/sharkdp/bat... 贴主是把 Linux = Arch 了..
    fan123199
        21
    fan123199  
       2018-06-04 10:02:56 +08:00
    @LeungV2 在 github 里,找到用 binary 的方式安装,我是 ubuntu,用的 deb
    xwhxbg
        22
    xwhxbg  
       2018-06-04 10:31:24 +08:00   ❤️ 2
    这货替代 less 可以,替代不了 cat
    wklken
        23
    wklken  
       2018-06-04 10:41:55 +08:00   ❤️ 1
    ccat +1

    alias cat=ccat 使用一年多了
    SingeeKing
        24
    SingeeKing  
       2018-06-04 12:11:05 +08:00
    单纯代码高亮可以使用 ccat,不过加上了分页那么还不错


    @xwhxbg #22 请问为什么无法替代 cat ?
    iyaozhen
        25
    iyaozhen  
       2018-06-04 12:16:02 +08:00 via Android
    感觉平常也不用 cat 看文件呀,看日志用 less,看代码用 vim
    akillcool
        26
    akillcool  
       2018-06-04 12:49:23 +08:00 via Android
    cat head tail 一起用,而且 cat 直接按行传文本文件到管道很方便,如果看文本的话,更倾向于直接 vim
    dahvlh
        27
    dahvlh  
       2018-06-04 12:51:09 +08:00
    ubuntu 上 缺少 makepkg
    AaronWxt
        28
    AaronWxt  
    OP
       2018-06-04 12:53:05 +08:00
    @LeungV2 这个只是把项目源码拉下来。
    congeec
        29
    congeec  
       2018-06-04 12:57:14 +08:00 via iPhone
    我用 highlight 做语法高亮
    平时 cat 就那么几个用法
    cat -e or cat -a to display non-printable characters
    cat file > new-file to copy a file with file attributes set by default mask
    cat << EOF
    没用 bat 的需求呐
    sakura111
        30
    sakura111  
       2018-06-04 13:03:29 +08:00   ❤️ 1
    说吧,bat 三家公司给了你多少钱?我今日头条出三倍!
    ACSuperChen
        31
    ACSuperChen  
       2018-06-04 13:20:14 +08:00
    我一般用 cat 复制东西。。。
    楼主这个东西是好,只是复制还是有行号,很麻烦。。。
    xwhxbg
        32
    xwhxbg  
       2018-06-04 13:35:30 +08:00
    @SingeeKing 比如我用 cat 拼接文件,但是并不需要行号和高亮
    nekoyaki
        33
    nekoyaki  
       2018-06-04 13:40:08 +08:00
    cat 的命令本来就不是给你输出人类可读的文本的……很多程序要用 cat 来把某些文件给管道到其他输出里去,这些文件甚至有可能是二进制文件。
    如果把系统里的 cat 给替代了,到时候死都不知道怎么死的……
    乖乖用 less 和 vim 不好吗。
    kiwi95
        34
    kiwi95  
       2018-06-04 13:54:43 +08:00 via Android
    这是楼主自己写的工具吗,如果不是,一个冷门命令行工具写下用法就贴一个自己公众号的推广,这算什么?
    hiahia
        35
    hiahia  
       2018-06-04 14:08:50 +08:00
    看标题还以为要讲 ccat 呢
    muziki
        36
    muziki  
       2018-06-04 14:25:35 +08:00 via iPhone
    楼上一堆连 readme 都读不懂的说管道,文件拼接
    tuding
        37
    tuding  
       2018-06-04 15:10:30 +08:00
    麻烦问下, ccat demo.txt 提示 "Enter decryption key: "是什么意思
    @hiahia
    @twor2
    dorentus
        38
    dorentus  
       2018-06-04 16:23:21 +08:00 via iPhone
    还以为要讲 lolcat 呢
    jorneyr
        39
    jorneyr  
       2018-06-04 16:30:33 +08:00
    挺好的,用上了
    EPr2hh6LADQWqRVH
        40
    EPr2hh6LADQWqRVH  
       2018-06-04 16:33:58 +08:00
    cat -- ConcATenate and print files
    gongzili456
        41
    gongzili456  
       2018-06-04 17:39:04 +08:00
    ccat 了解一下
    param
        42
    param  
       2018-06-05 01:39:11 +08:00 via Android
    @twor2 之前一直用 ccat,后来发现了 bat 就一直用 bat。还有一个毛病是,跟另一个名为 bat 的项目名冲突了。。

    https://github.com/astaxie/bat

    直接在 aur 安装会冲突,只好让其中一个手动下载 binary 并设 alias
    Kobayashi
        43
    Kobayashi  
       2018-12-05 18:33:49 +08:00
    bat. A cat(1) clone with wings.

    上面这句话本身就是个笑话,cat 定位是做文本拼接,例如把文件 1 的内容拼接到文件 2 后面。当只给定一个文件名作为参数时,把文件内容拼接到标准输出。cat 从来没说自己是要做文本查看、语法高亮。

    而这个 bat,没有拼接功能也号称是 cat 的 clone。其实这没啥关系,bat 语法高亮显示、行号显示是做的不错。但是这个定位太 TM 尴尬,语法高亮是属于文本编辑器的工作,vim、nano、emacs、subl、vscode 哪个不行?而且 vim、nano 查看文本还不会污染终端的输出,你这 bat 把所有内容全都扔在终端给人看。

    用 cat 来查看文本内容的人我真不明白你们是怎么想的,放着文本编辑器不用,非要找作文本拼接的来做文本查看。还有那个用 pygmentize 的兄弟,你也是绝了。

    `cat | pygmentize`, cat 做输入,这也是 cat 标准的错误用法。内容输入,请用重定向:`pygmentize < README.md`.

    给 vim、nano 配置一个语法高亮,有那么难么?有那么难么? https://github.com/scopatz/nanorc
    Kobayashi
        44
    Kobayashi  
       2018-12-05 18:42:47 +08:00
    @jasonyang9 不符合。bat. A cat(1) clone with wings. 这句话本身就是笑话。
    @SingeeKing 因为 cat 根本不是做文本查看的。cat, concatenate. 用来做文本拼接。cat 做文本查看,这是 cat 常见错误用法之一。
    @yanaraika `pygmentize < filename` 了解一下。cat 做文本输入,这也是 cat 常见的错误用法之一。内容输入请用重定向。

    @nekoyaki 又见一位,文本输入不要用 cat 加管道,用重定向 `<`。这样简化了过程,没必要经过 cat,浪费时间。
    nekoyaki
        45
    nekoyaki  
       2018-12-05 18:48:05 +08:00
    @Kobayashi
    “文本输入不要用 cat 加管道,用重定向 `<`。这样简化了过程,没必要经过 cat,浪费时间。”
    ======
    理想很好,你看看现实世界的普通程序员理不理你……
    nekoyaki
        46
    nekoyaki  
       2018-12-05 18:51:40 +08:00
    @Kobayashi
    ……八百年钱的帖子,没注意你不是楼主,不好意思。
    我想说的是,贸然替换系统最常用的命令,很容易产生问题。你说不要用 cat 加管道,我知道这个道理,可其他写脚本的人未必遵守。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6105 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:13 · PVG 14:13 · LAX 22:13 · JFK 01:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.