比 cat 更好用的命令了解一下? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AaronWxt
V2EX    程序员

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

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

    作为程序员经常使用命令行来进行一些文件的处理,比如常见的: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  
    PRO
       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  
    PRO
       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     Solana     3363 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 04:45 PVG 12:45 LAX 20:45 JFK 23:45/a>
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86