Linux 文本相关命令(1)

前言

最近线上环境(Windows Server)出现了一些问题,需要分析一下日志。感觉 Windows 下缺少了一些 Linux 系统中的小工具,像在这波操作中用到的 grep、sort、uniq、awk 这些,本文简单梳理回顾下鄙人在使用这些工具中的一些小技巧和遇到的坑。当然,由于开发的机器都是 Windows,因此使用 Docker Desktop 环境运行 Linux 镜像,并且使用共享文件夹的方式以共享数据。

1. Docker 镜像中的编码问题

在共享文件夹(Windows 中为 d:\docker-share,容器中为 /shared-windows)中新建一个名为 “Overwatch守望先锋” 的文本文件,并在其中写入 “You are powered up,get in there! 你被强化了,快送!”

需要注意的是,在鄙人现在的 Windows 系统(Windows 10 专业版 2004)的记事本中,保存时默认编码为 UTF-8。由于暂时没有其它系统,因此不再考虑其它编码格式的影响。

首先运行官方的 ubuntu 镜像,cd 到 /shared-windows 目录下,查看当前目录下的所有文件:

可以看到由于文件名是中文,无法正确的显示(比较奇怪的是,此时使用 cat 命令可以正确的看到文本中的中文)。

解决方法:

docker exec 时使用 env LANG=C.UTF-8 以 指定编码格式

如:

可以看到文件列表已经可以正常展示了。

注意事项

(1) 网络上还有其它案例讲使用 LANG=C.UTF-8,并执行 source /etc/profile ,鄙人试验后没有成功。

(2) 如果是自己构建镜像,当然可以将上述命令添加到 Dockerfile 中,起到同样的效果。

(3) 显示中文应该只能在 Ubuntu, CentOS 这些操作系统类镜像中配置,在 busybox 这种工具镜像中不能实现(因为根本没有其它语言和编码啊QAQ)

2. grep 命令查看前后几行

在文件夹中新建一个名为 grep_test.txt 的文件,里面用随便打几行数字,并在较中间的一行加入字母A:

root@756adc85c954:/shared-windows# cat grep_test.txt

123123123123

6745686578756

45665436

345645A7678987         # 此行加入字母 A

24523525443546786578

5796789780890

34352353466

8907980

使用grep命令可以找到日志中对应的报错位置,如果想查看报错的前后都发生了什么,可以使用 grep -C + 数字 + 要查找的字符串,如:

root@756adc85c954:/shared-windows# cat grep_test.txt | grep -C 1 A

45665436

345645A7678987

24523525443546786578

查看字母 A 所在行的前后两行。

3. uniq 命令的小坑

在文件夹中新建一个名为 uniq_test.txt 的文件,里面每行依次用 123456 、ABCDEFG、123456、123456、ABCDEFG 填充:

root@756adc85c954:/shared-windows# cat uniq_test.txt

123456

ABCDEFG

123456

123456

ABCDEFG

尝试使用 uniq 命令去除重复行,可以看到 uniq 命令并未正确去重,因为 uniq 是去除的连续的重复:

root@756adc85c954:/shared-windows# cat uniq_test.txt | uniq

123456

ABCDEFG

123456

ABCDEFG

应当先使用 sort 命令排序后再使用 uniq 命令去重,如:

root@756adc85c954:/shared-windows# cat uniq_test.txt | sort | uniq

123456

ABCDEFG

参考

Docker 容器中显示中文 https://blog.csdn.net/gao449812984/article/details/83377132

grep 显示前后几行 https://www.cnblogs.com/noxy/p/11127678.html

uniq 的一些使用技巧 https://www.cnblogs.com/lovychen/p/5639753.html

Linux 文本相关命令(1)的更多相关文章

  1. Linux文本相关命令

    Linux文本相关命令 目录 Linux文本相关命令 文本排序命令 文本去重命令 基础命令cut 文本三剑客 sed awk grep 文本排序命令 sort 常用参数: -n:以数值大小进行排序 - ...

  2. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  3. Linux性能相关命令

    Linux性能相关命令 目录 Linux性能相关命令 1. 查看硬盘相关信息 2. 查看CPU相关信息 3. 查看内存相关信息 4. 查看进程运行的信息 1. 查看硬盘相关信息 cat /proc/s ...

  4. 编程小技巧之 Linux 文本处理命令(二)

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本篇文章是<Linux 文本处理命令> 续篇,在前文的基础上再介 ...

  5. Linux文件管理相关命令

    Linux文件管理相关命令   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...

  6. linux文本处理命令

    linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc  [OPTION]...  [FILE]... wc  [OPTION]...  --files0-f ...

  7. Linux进程相关命令使用场景

    Linux进程相关命令使用场景 在Linux系统上工作时,我们常常会碰到很多和进程相关的查询场景,今天在这里进行详细的讲解,进程相关的对象包括以下几个: 端口:Port 进程号:PId 执行文件所在路 ...

  8. Linux 网络相关命令 Cheat Sheet

    以下漫画形式呈现的常用 Linux 网络相关命令速查表来自 twitter -

  9. Linux解压缩相关命令

    Linux解压缩相关命令 运行级别: 0:关机 1:单用户 2:多用户无网络连接 3:多用户有网络连接 4:系统保留 5:图形界面 6:系统重启 通过init[0123456]来切换不同的运行级别 g ...

随机推荐

  1. Maven 基础标签之版本管理和冲突解决

    前言 我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线 maven基础 Maven 是一个项目管理工具,主要用于项目构建,依赖管理, ...

  2. 超详细Java基础-多态

    茫茫人海千千万万,感谢这一秒你看到这里.希望我的能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! Java基础知识(多态) 多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该 ...

  3. 代码部署:使用 nginx 代理到云服务器 ( windows 系统)

    在部署之前我们首先要了解什么是nginx,它又可以做什么 Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,00 ...

  4. 06.I/O操作

    参考文章 https://www.cnblogs.com/xuwenfeng/articles/2238127.html 1. 驱动器操作 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可 ...

  5. UVa11054 Gergovia的酒交易(数学归纳法)

    直线上有\(n\)个等距村庄,每个村庄要么买酒,要么卖酒.设第\(i\)个村庄对酒的需求为\(A_i\)(\(-1000 \leqslant A_i \leqslant 1000\)),其中\(A_i ...

  6. Nmap 常用命令及抓包分析

    1.主机发现:主机发现也称为ping扫描,但是Nmap中主机发现的技术已经不是简单的采用ping工具发送简单的ICMP回声请求报文.用户完全可以通过使用列表扫描(-sL)或者通过关闭ping(-P0) ...

  7. Python 可变数据类型与不可变数据类型

    浅拷贝和深拷贝 Python数据都是存放到内存中的,Python的数据又分为可变和不可以变 可变数据(修改了值后,不会改变内存地址,修改的值还是指向相同的内存地址) 字典 # 列表是可变 x = [1 ...

  8. NOIP 模拟 $12\; \text{简单的区间}$

    题解 签到题 求区间和为 \(k\) 的倍数的区间,我们可以转化为求左右两个端点,其前缀和相等 对于区间最大值,我们可以把其转化为一个值,它能向左,向右扩展的最远边界,一个单调栈即可 我们设一个值 \ ...

  9. ansible 常用模块总结

    记录常用的模块功能,详细使用查看官网. 1. file模块 创建软连接 ansible test -m file -a "src=/tmp/conf.d dest=/tmp/conf.d s ...

  10. C#串口通信SeriPort 电表DLT645 RS234/RS485

    难受,三个多月前有一个电表电量监控的项目.做完了就没再管了.今天有需求需要改一些地方,但是....我想不起来干了啥,怎么干的啦.真的完全忘了.....项目名称叫啥都忘了.找了半天 不知道有没有和我一样 ...