Linux 文本相关命令(1)
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)的更多相关文章
- Linux文本相关命令
Linux文本相关命令 目录 Linux文本相关命令 文本排序命令 文本去重命令 基础命令cut 文本三剑客 sed awk grep 文本排序命令 sort 常用参数: -n:以数值大小进行排序 - ...
- 编程小技巧之 Linux 文本处理命令
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...
- Linux性能相关命令
Linux性能相关命令 目录 Linux性能相关命令 1. 查看硬盘相关信息 2. 查看CPU相关信息 3. 查看内存相关信息 4. 查看进程运行的信息 1. 查看硬盘相关信息 cat /proc/s ...
- 编程小技巧之 Linux 文本处理命令(二)
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本篇文章是<Linux 文本处理命令> 续篇,在前文的基础上再介 ...
- Linux文件管理相关命令
Linux文件管理相关命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...
- linux文本处理命令
linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc [OPTION]... [FILE]... wc [OPTION]... --files0-f ...
- Linux进程相关命令使用场景
Linux进程相关命令使用场景 在Linux系统上工作时,我们常常会碰到很多和进程相关的查询场景,今天在这里进行详细的讲解,进程相关的对象包括以下几个: 端口:Port 进程号:PId 执行文件所在路 ...
- Linux 网络相关命令 Cheat Sheet
以下漫画形式呈现的常用 Linux 网络相关命令速查表来自 twitter -
- Linux解压缩相关命令
Linux解压缩相关命令 运行级别: 0:关机 1:单用户 2:多用户无网络连接 3:多用户有网络连接 4:系统保留 5:图形界面 6:系统重启 通过init[0123456]来切换不同的运行级别 g ...
随机推荐
- 【学习笔记】Expression表达式目录树
Expression表达式目录树:一个能拼装能解析的数据结构,语法树. 一.手动拼装表达式目录树 示例1: /// <summary> /// 展示表达式树,协助用的 /// 编译lamb ...
- Linux之cat tail less常见用法
1.cat 通常查找出错误日志 cat error.log | grep 'foo' , 这时候我们还有个需求就是输出当前这个日志的前后几行: cat error.log | grep -C 10 ' ...
- 把对象交给spring管理的3种方法及经典应用
背景 先说一说什么叫把对象交给spring管理.它区别于把类交给spring管理.在spring里采用注解方式@Service.@Component这些,实际上管理的是类,把这些类交给spring来负 ...
- linux 磁盘IO速度测试
写入速度测试命令:time dd oflag=direct if=/dev/zero of=/data2/test bs=2k count=1000000 //if表示从哪里读取 of表示写入到哪里 ...
- [WPF] 使用 MVVM Toolkit 构建 MVVM 程序
1. 什么是 MVVM Toolkit 模型-视图-视图模型 (MVVM) 是用于解耦 UI 代码和非 UI 代码的 UI 体系结构设计模式. 借助 MVVM,可以在 XAML 中以声明方式定义 UI ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- L298N使用资料
L298N驱动连接arduino小车电机(代码和使用): https://www.cnblogs.com/fsong/p/12309911.htmlarduino UNO 连接L298N驱动两个电机转 ...
- .NET WebApi 实战第五讲之EntityFramework事务
在<.NET WebApi 实战第二讲>中我们有提到过事务的概念!任何数据库的读操作可以没有事务,但是写事件必须有事务,如果一个后端工程师在数据库写入时未添加事务,那就不是一个合格的工程师 ...
- vue去掉一些烦人的校验规则
例如:括号前没有加空格报错,很难受 如何处理呢,故意犯错,然后打开页面出现错误信息,如下图复制错误 space-before-function-paren 找到项目中的.eslintrc.js 添加一 ...
- 字符串拷贝函数递归与非递归的C语言实现
初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出.既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句.... ...