当前位置: 首页 > news >正文

文本处理工具

Grep工具的基本使用


grep作用:grep是行过滤工具;用于根据关键字进行行过滤

提示:通过alias命令设置grep别名,搜索参数时带颜色显示

alias grep='grep color=auto '

命令语法格式:

grep [选项] '参数' 文件名

grep命令选项:

  • -n :显示行号

  • -i:忽略大小写

  • ^xxx:以xxx开头的格式

  • xxx$:以xxx结尾的格式

  • -v:取反

  • -B:打印前几行

  • -A:打印后几行

  • -C:过滤上下文(前几行,后几行)

  • -w:按单词搜索

  • -o:打印匹配关键字

  • '^$':空行


Cut工具的基本使用


cut作用:cut是列截取工具,用于列的截取

命令语法格式:

cut 选项 文件名

cut命令选项:

  • -c:以字符为单位(个)分割,截取

  • -d:自定义分隔符,默认为制表符\t

  • -f:与-d一起使用,指定截取哪个区域

示例: 如何过滤和截取centos6系统运行级别
runlevel | cut-c3
runlevel | cut-d:' '-f2
grep-v'^#' /etc/inittab | cut-d: -f2
grep'^id' /etc/inittab | cut-d: -f2
grep"initdefault:$" /etc/inittab | cut -c4
grep -v ^# /etc/inittab | cut -c4
grep'id:' /etc/inittab | cut-d: -f2
cut-d':'-f2 /etc/inittab | grep-v ^#
cut-c4 /etc/inittab | tail -1
cut-d: -f2 /etc/inittab | tail -1

Sort工具的基本使用


sort作用:sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将它们按升序输出

sort命令选项:

  • -u:去除重复

  • -r:降序排列,默认是升序

  • -o:将排序结果输出到文件这,类似重定向符号>

  • -n:以数字排序,默认是按字符排序

  • -t:分隔符

  • -k:第N列

  • -b:忽略前导空格

  • -R:随机排列,每次运行的结果均不同


Uniq工具的基本使用


uniq作用:uniq用于去除连续的重复行

uniq命令选项:

  • -i:忽略大小写

  • -c:统计重复行次数

  • -d:只显示重复行


Tee工具的基本使用


tee作用:tee工具是将数据输出显示屏幕一份,然后再重定向输入到文件一份,即:(屏幕输出|文本输入 )

tee命令选项:

  • -a:重定向追加数据


Diff工具的基本使用


diff作用:diff工具用于逐行比较文件的不同

注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配。

命令语法格式:

diff [选项] 文件1 文件2

diff命令选项:

  • -b:不检查空格

  • -B:不检查空白行

  • -i:不检查大小写

  • -w:忽略所有的空格

  • --normal:正常格式显示(默认)

  • -c:上下文格式显示

  • -u:合并格式显示

举例说明:

  • 比较两个普通文件异同,文件准备:

[root@localhost~]# cat file1
aaaa
111
hello world
222
333
bbb
[root@localhost~]#
[root@localhost~]# cat file2
aaa
hello
111
222
bbb
333
world
正常格式显示比较结果,解释说明:
diff目的:file1如何改变才能和file2匹配
[root@localhost~]# diff file1 file2
1c1,2     #第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配
​
< aaaa    #小于号"<"表示左边文件(file1)文件内容
---       #---表示分隔符
> aaa     #大于号">"表示右边文件(file2)文件内容
> hello   
3d3       #第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4       #第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7     #第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333     #需要增加的内容在第二个文件里是333和world
> world
上下文格式显示比较结果,解释说明:
[root@localhost~]# diff -c file1 file
#前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2
*** file1 2022-01-2721:45:05.748650262 +0800
--- file2 2022-01-2721:45:30.470646030 +0800
***************  #我是分隔符
*** 1,6 ****     #以***开头表示file1文件,1,6表示1到6行
!aaaa           # !表示该行需要修改才能与第二个文件匹配111
- hello world    # -表示需要删除该行才能与第二个文件匹配222
-333            # -表示需要删除该行才能与第二个文件匹配bbb
---1,7 ---      # 以---开头表示file2文件,1,7表示1到7行
!aaa            # 表示第一个文件需要修改才能与第二个文件匹配
!hello          # 表示第一个文件需要修改才能与第二个文件匹配111222bbb
+333            # 表示第一个文件需要加上该行才能与第二个文件匹配
+ world          # 表示第一个文件需要加上该行才能与第二个文件匹配
合并格式显示比较结果,解释说明:
[root@localhost~]# diff -u file1 file2
#前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2
--- file1 2022-01-2721:45:05.748650262 +0800
+++ file2 2022-01-2721:45:30.470646030 +0800
@@ -1,6 +1,7 @@
-aaaa
+aaa
+hello
111
-hello world
222
-333bbb
+333
+world
  • 比较两个目录不同

#默认情况下也会比较两个目录里相同文件的内容
[root@localhost tmp]# diff dir1 dir2
diff dir1/file1 dir2/file1
0a1
> hello
only in dir1: file3
only in dir2: file1
#如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容,需要加-q选项
[root@localhost tmp]# diff -q dir1 dir2
Files dir1/file1 and dir2/file1 differ
only in dir1: file3
only in dir2: file1

diff其他小技巧:

有时我们需要以一个文件为标准,去修改其他文件,并且 修改的地方较多时,我们可以通过打补丁的方式完成。

1)先找出文件不同,然后输出到一个文件
[root@localhost ~]# diff -uN file1 file2 > file.patch
-u:上下文模式
-N:将不存在的文件当作空文件
2)将不同内容打补丁到文件
[root@localhost ~]# patch file1.patch
patching file file1
3) 测试验证
[root@localhost ~]# diff file1 file2
[root@localhost ~]#

Paste工具的基本使用


paste作用:paste工具用于合并文件行

paste命令选项:

  • -d:自定义间隔符,默认是tab

  • -s:串行处理,非并行


Tr工具的基本使用


tr作用:tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换

命令语法格式:

用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
#commands|tr  'string1'  'string2'
用法2:tr处理的内容来自文件,记住要使用"<"标准输入
# tr 'string1'  'string2' < filename
用法3:匹配string1进行相应操作,如删除操作
# tr options 'string1' < filename

tr命令选项:

  • -d:删除字符串1中所有输入字符

  • -s:删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串

常用匹配字符串:

字符串 含义

a-z或[:lower:] 匹配所有小写字母

A-Z或[:upper:] 匹配所有大写字母

0-9或[:digit:] 匹配所有数字

[:alnum:] 匹配所有字母和数字

[:alpha:] 匹配所有字母

[:blank:] 所有水平空白

[:punct:] 匹配所有标点符号

[:space:] 所有水平或垂直的空格

[:cntrl:] 所有控制字符 \f Ctrl-L 走行换页 \n Ctrl-J 换页 \r Ctrl-M 回车

\t Ctrl-I tab键


命令练习


1.过滤截取出网卡IP地址:

ifconfig eth0 | grep'netmask' | cut-d: -f2 | tr -d'a-zA-Z'

或者

ifconfig eth0 | grep 'netmask' | cut -d: -f2 | cut -d' ' -f1

2.过滤截取网络地址信息换行,并且去除空格

ifconfig ens33 | grep'netmask' | tr -d'a-z' | tr ' ''\n' | grep-v'^$'

3.压缩空格并截取网络Mac地址信息

ifconfig eht0 | grep'HWaddr' | tr -s' '
ifconfig eth0 | grep'HWaddr' | cut-d' '-f5

4.将系统中所有普通用户的用户名、密码和默认shell保存到一个文件中,要求用户名密码和默认shell之间用tab键分割

注释:-E 匹配扩展正则表达式,|代表或者,是一个扩展正则
grep'bash$' /etc/passwd | grep-v'root' | cut-d: -f1,2,7 | tr ':''\t' | tee qq.txt

相关文章:

文本处理工具

Grep工具的基本使用grep作用&#xff1a;grep是行过滤工具&#xff1b;用于根据关键字进行行过滤提示&#xff1a;通过alias命令设置grep别名&#xff0c;搜索参数时带颜色显示alias grepgrep colorauto 命令语法格式&#xff1a;grep [选项] 参数 文件名grep命令选项&#xff…...

C++STL详解(三)——vector的介绍和使用

文章目录vector的介绍vector的使用vector的定义方式vector的空间增长问题reserve和resizevector的迭代器使用begin 和endrbegin和rendinsert 和erasefind函数元素访问vector迭代器失效问题1&#xff1a;inserse插入扩容时空间销毁造成野指针问题2&#xff1a;erase删除或者inse…...

GEBCO海洋数据下载

一、数据集简介 GEBCO&#xff08;General Bathymetric chart of the Oceans&#xff09;旨在为世界海洋提供最权威的、可公开获取的测深数据集。 目前的网格化测深数据集&#xff0c;即GEBCO_2022网格&#xff0c;是一个全球海洋和陆地的地形模型&#xff0c;在15角秒间隔的…...

【C++容器】vector、map、hash_map、unordered_map四大容器的性能分析【2023.02.28】

摘要 vector是标准容器对数组的封装&#xff0c;是一段连续的线性的内存。map底层是二叉排序树。hash_map是C11之前的无序map&#xff0c;unordered_map底层是hash表&#xff0c;涉及桶算法。现对各个容器的查询与”插入“性能做对比分析&#xff0c;方便后期选择。 测试方案…...

ACM-蓝桥杯训练第一周

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

python基础—字符串操作

&#xff08;1&#xff09;字符串&#xff1a; Python内置了一系列的数据类型&#xff0c;其中最主要的内置类型是数值类型、文本序列&#xff08;字符串&#xff09;类型、序列&#xff08;列表、元组和range&#xff09;类型、集合类型、映射&#xff08;字典&#xff09;类型…...

【Spring】通过JdbcTemplate实现CRUD操作

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 通过JdbcTemplate实现 增删查改一、添加相关依…...

实战|掌握Linux内存监视:free命令详解与使用技巧

文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出四. free在脚本中的应用总结前言 大家…...

嵌入式入门必看!调试工具安装——基于 AM64x核心板

本章节内容是为评估板串口安装USB转串口驱动程序。驱动适用于CH340、CH341等USB转串口芯片。 USB转串口驱动安装 适用安装环境:Windows 7 64bit、Windows 10 64bit。 本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cort…...

JAVA开发(java类加载过程)

1、java语言的平台无关性。 因为java语言可以跑在java虚拟机上&#xff0c;所以只要能装java虚拟机的地方就能跑java程序。java语言以后缀名 .java为文件扩展名。通过java编译器javac编译成字节码文件.class 。java字节码文件通过java虚拟机解析运行。所以java语言可以说是编译…...

【vulhub漏洞复现】Thinkphp 2.x 任意代码执行

一、漏洞详情影响版本 thinkphp 2.x但是由于thinkphp 3.0版本在Lite模式下没有修复该漏洞&#xff0c;所以也存在该漏洞漏洞原因&#xff1a;e 和 /e模式匹配路由&#xff1a;e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式&#xff0c…...

LeetCode 1145. 二叉树着色游戏 -- 简单搜索

二叉树着色游戏 提示 中等 199 相关企业 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中&#xff0c;给出二叉树的根节点 root&#xff0c;树上总共有 n 个节点&#xff0c;且 n 为奇数&#xff0c;其中每个节点上的值从 1 到 n 各不相同。 最开始时&#xff1a; 「一…...

HyperGBM的三种Early Stopping方式

本文作者&#xff1a;杨健&#xff0c;九章云极 DataCanvas 主任架构师 很多机器学习框架如都提供了Early Stopping策略&#xff0c;主要用来防止模型过拟合。和模型训练提前停止的目标不同&#xff0c;AutoML的Early Stopping策略更多考虑的是算力消耗和模型质量的平衡。 通…...

心系区域发展,高德用一体化出行服务平台“聚”力区域未来

交通&#xff0c;是城市的血脉。通过对人、资源、产业的连接&#xff0c;交通建设往往是城市和区域经济发展的前提。不过&#xff0c;在度过了“要想富&#xff0c;先修路”的初级建设阶段后&#xff0c;交通产业内部也出现了挑战&#xff0c;诸如城市秩序、发展成本、用户使用…...

AI画图_stable-diffusion-webui安装使用指南(1)

本文章适用于: 有一定学习能力和钻研能力&#xff0c;遇到问题能合理使用搜索引擎尝试解决问题的人想在windows系统中尝试使用AI作画工具stable-diffusion-webui进行绘画的人有一定的计算机基础&#xff08;会魔法上网、知道 python和Git&#xff09;和英文阅读能力的人显卡为…...

浅谈MySQL主从复制

目录 1.MySQL主从复制是什么 2.MySQL主从复制的意义 3.MySQL主从复制原理 4.数据同步一致性问题 5.实现方式 1.MySQL主从复制是什么 MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式&#xff0c;这样从节点不用一直访…...

docker-compose安装kafka和php简单测试

docker-compose.yml内容&#xff1a; version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …...

【蓝桥云课】快速幂

问题描述&#xff1a;快速求aba^bab 方法一&#xff1a;常规方法相乘a∗a∗a∗a∗...∗aa*a*a*a*...*aa∗a∗a∗a∗...∗a 方法二&#xff1a;分治方法求aba^bab ab{1,b0a,b1ab2⋅ab2,b为偶数ab−12⋅ab12,b为奇数a^b\begin{cases} 1& \text{,b0}\\ a& \text{,b1}\\ a…...

解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题

网上关于wxPython安装失败&#xff0c;安装速度过慢&#xff0c;以及安装成功后PyCharm中import wx仍然爆红的文章有很多&#xff0c;也特别杂&#xff0c;解决起来特别困难&#xff0c;今天在这里对问题的处理进行一个整合&#xff0c;希望能帮助到大家。 安装wxPython这里运用…...

封装小程序request请求[接口函数]

在这篇小程序API的Promise化文章中讲到小程序官方提供的异步API都是基于回调函数来实现的&#xff0c;在大量的使用这种回调函数就会造成回调地狱的问题&#xff0c;以及代码的可读性和可维护性差&#xff0c;通过对小程序API的Promise化能解决&#xff0c;那么本篇是来讲进行对…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...