比cat更好用的命令!

2023-10-31

大家好,我是良许。

作为程序员,大家一定对 cat 这个命令不陌生。它主要的功能就是用来显示文本文件的具体内容。

cat 命令两个很重大的缺陷:1. 不能语法高亮输出;2. 文本太长的话无法翻页输出。正是这两个不足,使得 cat 只能用来查看行数不多的小文件。

为了解决 cat 命令这两个缺点,国外有大牛将 cat 命令进行了增强,强大到连 cat 亲妈都不认识!

它就是本文的主角:bat 命令。

bat 命令可以用来做啥呢?简单来说有下面这些:

  1. 语法高亮。它可以根据编程语言以及 markdown 语法将文本关键词高亮,可阅读性大大增强;
  2. 自动翻页。如果文本内容太长,超过一页的话,它会自动将内容通过管道传到 less 命令,实现翻页的效果;
  3. 集成Git。bat 命令跟 git 完美结合,将文本的修改部分在左侧展示,一眼就可以看出文件修改了啥。
  4. 显示不可打印字符。有些字符无法通过 cat 在屏幕上显示,但 bat 让它们无处遁形!

bat 的这些特性,真的是分分钟让 cat 打下神坛!(怪不得人家是以 b 开头的,牛 B 的 B !)

1. bat命令的安装

现在很多 Linux 发行版的官方源已经内置了这个命令,所以只需使用它们对应的安装工具就可以安装。

以 Ubuntu 为例,只需要运行以下命令就可以安装 bat

$ sudo apt-get install bat

这里要注意一下,由于名称的冲突,在 Ubuntu 下无法直接通过敲 bat 这三个字母运行 bat 命令,而是需要敲 batcat 。为了方便,我们可以设置别名:

$ alias "bat=batcat"

2. bat命令的使用

2.1 基本使用

bat 命令的用法跟 cat 大差不差的,我们直接上图来看下对比。

file

可以看到,bat 命令除了输出与 cat 一样的文本内容之外,还输出了包括行数、文件名、表格外框等元素,看起来信息会更多。

如果行数比较多,还可以使用 --line-range 来显示指定行数的内容。

file

而且,它还可以跟其它命令通过管道一起结合着用:

file

2.2 语法高亮

bat 对大部分编程语言和标记语言提供语法高亮,这样阅读起来就更方便了,可读性更强。

file

而且,你还可以通过使用 --list-languages 参数来显示所有支持的语言:

file

2.3 Git 集成

bat 能从 git 中获取文件的修改并展示在边栏(见下图):

file

2.4 显示不可打印字符

有时候文本里有一些不可显示的字符,如果使用 cat 命令查看的话,将看不到这些字符。但如果使用 bat 命令,这些字符就无处遁形。这里需要加上 -A/--show-all 参数。

file

2.5 自动翻页功能

这应该是直戳 cat 命令痛点的功能。

由于 cat 命令不管文本长度如何,全部一股脑就给你显示出来,使得我们需要查看内容比较多的文本文件的时候,必须选择其它命令(比如 moreless 等等)。

bat 命令很明显是冲着这个痛点来的。它在文本内容超过一屏可显示范围时,就会将其发送到 less 命令,然后我们就可以像使用 less 一样进行翻页操作,非常方便。

file

当然,如果你想不使用翻页功能的话,也可以使用 --paging=never 参数来关闭这个功能。但我估计没人这么做。

3. 主题定制

bat 命令支持多种风格的语法高亮主题,可以满足大部分程序员的需求。可以使用下列命令查看 bat 支持的所有主题:

$ bat --list-themes

file

如果你想指定主题为 GitHub ,那么可以使用以下命令:

$ bat --theme=GitHub 文件名

但这样做是临时的,当你关闭终端工具,或者系统重启,主题就会恢复默认。

可以通过设置 BAT_THEME 环境变量来选定主题。把 export BAT_THEME="GitHub" 添加到 shell 的启动脚本来取得永久效果。

除此之外,你还可以自定义输出样式,甚至可以自己添加新的语言和语法,输出让自己满意的高亮样式。但我觉得系统自带的那些样式其实已经可以满足我们大部分需求了,没必要把时间花在这上面。有兴趣的小伙伴可以去看它们的官方文档,有详细的教程。

4. 小结

bat 命令真的十分强大,简直是 cat 命令的完美代替品!特别是它的语法高亮、自动翻页功能,简直是对 cat 的精准狙杀。

如果你经常查看文本,那么可以使用 bat 来替代 cat ,相信我,用完之后你就再也回不来了!


学习编程,千万不要急于求成,一定要多读一些经典书籍,多看源码,多下苦功夫去死磕代码,这样技术才能长进。给大家分享一些程序员必读经典书籍,一定要多读几遍:

file

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

欢迎关注我的博客:良许Linux教程网,满满都是干货!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比cat更好用的命令! 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm
  • Python 脚本作为 Linux 服务/守护进程

    Hallo 我试图让 python 脚本作为服务 守护进程 在 ubuntu linux 上运行 网络上存在多种解决方案 例如 http pypi python org pypi python daemon http pypi python
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • 让 TeXstudio 在 linux mint 中工作:找不到文件“url.sty”。

    刚刚切换到 Linux Mint 以前的顽固 Windows 用户 我在尝试安装 TeXstudio 时遇到一些问题 Sudo apt get install texstudio 给了我一个正确的安装 至少 我是这么认为的 但是当我尝试构建
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有
  • 如何从 C 程序中获取 NIC 详细信息?

    我想要获取连接到我的计算机的所有 NIC 的以下详细信息 1 接口名称 例如eth0 2 接口编号 如Windows http answers yahoo com question index qid 20080517041705AAOmJ
  • 为什么我的 Dockerfile CMD 不起作用?

    所以在我的 Dockerfile 的末尾我有这样的内容 WORKDIR home CMD django admin startproject whattt CMD bin bash 当我创建映像然后运行容器时 一切都按预期运行 没有错误 D
  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file

随机推荐

  • 配置maven指定的JDK版本

    配置maven指定的JDK版本 第一种 最省事 在我们安装maven环境的conf目录下修改settings xml文件 如下 在profiles中加入以下配置
  • debian终端tab键无法补全命令,apt install 无法补全

    debian终端无法补全命令 输入apt i 按tab键无法补全install 这很不方便 解决方法 1 安装bash completion 包 2 编辑 etc bash bashrc 3 编辑 etc profile 4 重新登录系统即
  • Mysql和Oracle的语法区别?

    Mysql和Oracle是两种不同的关系型数据库 MySQL通常在中小型应用程序 Web应用程序和小型企业中广泛使用 因为它易于学习和部署 而且成本较低 Oracle数据库通常用于大型企业和复杂的企业级应用程序 因为它提供了高度可扩展性 高
  • DDL数据定义语言

    文章目录 DDL Data Definition Language 数据定义语言 数据库的管理 表的管理 表的创建 表的删除 表的复制 表的修改 DDL Data Definition Language 数据定义语言 DDL其实是Data
  • epoll用法详解与编程实例

    1 epoll使用的三个函数 使用epoll时会用到三个函数 因此把这个三个函数弄明白了 也就明白了epoll的用法 要明白这个三个函数 最重要的就是要明白函数的参数 明白需要什么样的参数以及每一个参数的含义 1 1 epoll creat
  • 你知道花卉识别软件有哪些吗

    随着智能手机的普及 人们的生活越来越离不开这些便捷的小工具 而其中一种常见的应用就是花卉识别软件 花卉识别软件可以通过拍照 上传照片等方式 快速准确地识别出花卉的品种 方便人们了解花卉的名称 特点等信息 你知道花卉识别软件有哪些吗 软件一
  • 数据分析利器:pandas库的奥秘与代码示例

    pandas是Python中一款强大的数据分析库 它提供了数据清洗 数据操作 数据可视化等功能 使得数据分析与处理变得更加高效和便捷 本文将从基本概念 基础知识 高级特性 实战案例和总结五个方面 深入介绍pandas库的用法和技巧 一 基本
  • 用Power BI来进行移动网络质量可视化分析

    如果我们有一些按照时间顺序发生的无线网络测量数据 每个测量数据有一个对应的坐标点 那么我们如何利用Power BI来进行可视化分析呢 这里记录一下我的作法 我的原始数据如下 Datetime Latitude Longitude CellI
  • 【vue3】:全局搜索解决方案

    全局搜索解决方案 需求 用户通过搜索框进行全局搜索 与当前系统路由进行匹配 用户点击匹配结果 可以跳转到该路径下的页面 原理 根据用户输入内容在数据源中进行 模糊搜索 获取数据源 根据匹配结果 将其渲染到下拉框组件中 点击下拉框选项 跳转到
  • ant-design:Upload组件上传图片组件封装

    将Upload组件放入src components下成为全局组件 调用时通过子组件向父组件传值实现的 这里的子组件为全局组件下的Upload上传组件 父组件指的是调用时的路由组件 上传图片一般为是为了得到上传到服务器后的图片路径 具体配置如
  • React:阻止组件渲染

    使用return null ReactDOM render
  • Vue elementui中el-select获取选中label的值

    针对控件el select中的option一个是label一个是value 在控件中change方法或者v model我们只能拿到value 下面是获取到label的方法
  • 用python发邮件、添加附件

    python 发邮件 两个内置模块 smtplib email 需要了解附件以什么形式添加到邮件中 open方法 二进制 字节 什么是授权码 能够看懂邮件发送过程中的发送编码 发送成功 发送失败 垃圾邮件等编码编号 什么是smtp协议 SM
  • 本地docker注册证书docker login连接到harbor仓库、利用shell脚本将大量镜像pull、tag、push到私有harbor仓库

    1 本地docker注册证书docker login连接到harbor仓库 我们使用docker login push pull去与Harbor打交道 上传下载镜像等 但是可能会出现x509 certificate signed by un
  • 【送面试题】Linux中grep和find的区别及全面使用指南

    AI绘画关于SD MJ GPT SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 A
  • 常见测试用例设计方法2---边界值划分

    目录 二 边界值的基本思想 三 边界值的作用 四 边界值点的定义 五 边界值和等价类的联系 六 上点 离点 内点的确定 1 闭区间 2 开区间 3 半开半闭区间 总结 七 常见边界值 字符 整数 八 边界值分析案例优化建议 九 开闭区间的区
  • matlab 点云粗配准(8)——RANSAC算法实现点云粗配准(方法一)

    RANSAC 一 算法原理 1 算法概述 2 实现流程 二 代码实现 三 结果展示 一 算法原理 1 算法概述 基本思想是通过随机采样一定数量的点对 计算变换矩阵 然后用该变换矩阵将源点云变换到目标点云坐标系下 计算变换后的点云与目标点云之
  • Java开发:如何将model对象与json互相转换?

    model javabean 与json相互转换 文章声明 model对象与json之间互转网上有很多方法 此处只记录一种常用的 并且比较安全便捷的转换方法 使用gson 一 model转换json 1 首先创建一个model实体类 pac
  • 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器

    详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1 效果图 2 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器 光流是由物体或相机的运动引起的图像物体在连续两帧之间的明显运动的模式
  • 比cat更好用的命令!

    大家好 我是良许 作为程序员 大家一定对 cat 这个命令不陌生 它主要的功能就是用来显示文本文件的具体内容 但 cat 命令两个很重大的缺陷 1 不能语法高亮输出 2 文本太长的话无法翻页输出 正是这两个不足 使得 cat 只能用来查看行