文本编辑器与正则表达式

1. VIM 编辑器

1.1 VIM 基本概念

VIM 是一个高度可定制的文本编辑器,广泛用于程序员的日常开发中。与传统的文本编辑器不同,VIM 基于模式操作,具有以下几个主要特点:

  • 普通模式:用于浏览和修改文本。
  • 插入模式:用于输入文本。
  • 命令模式:用于执行命令。

1.2 常用 VIM 快捷键

切换模式
  • 插入模式:按 i 进入插入模式,按 Esc 返回普通模式。
  • 命令模式:按 : 进入命令模式。
编辑操作
  • 删除d + 操作(如 dd 删除一行,d$ 删除光标后所有字符)
  • 复制y + 操作(如 yy 复制一行,y$ 复制光标后的字符)
  • 粘贴pPp 粘贴到光标后,P 粘贴到光标前)
  • 撤销u 撤销,Ctrl + r 重做
移动光标
  • 上下左右移动k 上,j 下,h 左,l
  • 跳到行首/行尾0 跳到行首,$ 跳到行尾
  • 跳到文件顶部/底部gg 跳到文件开头,G 跳到文件结尾

1.3 配置与自定义

VIM 配置文件为 .vimrc,可以通过修改该文件来定制 VIM 的行为,例如:

  • 设置自动缩进:set smartindent
  • 设置行号显示:set number

常用插件:

  • NERDTree:文件浏览器
  • ctrlp.vim:快速文件搜索

2. 文本处理工具

2.1 grep 命令

grep 是一个强大的文本搜索工具,用于从文件中查找符合条件的文本。

基本用法
grep 'pattern' filename
  • -i:忽略大小写
  • -r:递归查找目录中的文件
  • -v:反转匹配,即显示不包含指定模式的行
示例:
grep -r 'error' /var/log/

查找 /var/log/ 目录下包含 error 的日志文件。

2.2 cut 命令

cut 用于按列提取文本。

基本用法
cut -d ' ' -f 1 filename
  • -d:指定字段分隔符
  • -f:指定要提取的字段
示例:
cut -d ',' -f 1,3 filename.csv

提取 CSV 文件中第 1 列和第 3 列的数据。

2.3 sort 命令

sort 用于对文本行进行排序。

基本用法
sort filename

常用选项:

  • -n:按数字大小排序
  • -r:倒序排列
  • -u:去除重复行
示例:
sort -n data.txt

按数字大小排序 data.txt 文件中的内容。

3. 正则表达式

3.1 基本正则表达式(BRE)与扩展正则表达式(ERE)

  • 基本正则表达式(BRE):采用标准字符匹配。
  • 扩展正则表达式(ERE):包含更多的元字符和扩展功能,如 +? 等。

3.2 常用正则表达式模式

匹配任意字符
  • .:匹配任意字符(除换行符外)
字符类
  • [a-z]:匹配小写字母
  • \d:匹配数字
  • \w:匹配字母、数字或下划线
量词
  • *:匹配 0 次或多次
  • +:匹配 1 次或多次
  • ?:匹配 0 次或 1 次
  • {n,m}:匹配 n 到 m 次
示例:

匹配以 log 开头并且后面跟随任意字符的字符串:

^log.*

3.3 常见场景与技巧

查找以特定字符结尾的行
grep 'pattern$' filename
查找以特定字符开头的行
grep '^pattern' filename

4. 文件查看与操作工具

4.1 cat 命令

cat 用于查看文件内容,合并多个文件,或者将内容输出到标准输出。

示例:
cat file.txt

输出 file.txt 的内容。

4.2 nl 命令

nl 命令会在输出的文本中为每一行添加行号。

示例:
nl file.txt

4.3 diff 命令

diff 用于比较两个文件的差异。

示例:
diff file1.txt file2.txt

输出 file1.txtfile2.txt 之间的不同之处。

5. 常见命令组合使用案例

5.1 分析日志文件

假设你需要从大量的日志文件中提取特定时间段内的错误信息,并统计每种错误的出现频率。

例子:提取过去 24 小时的错误信息,并统计错误类型出现频率
grep 'ERROR' /var/log/syslog | grep "$(date --date='24 hours ago' '+%b %d')" | awk '{print $5}' | sort | uniq -c | sort -nr

步骤解析:

  1. grep 'ERROR' /var/log/syslog:从 /var/log/syslog 日志文件中提取所有包含 “ERROR” 的行。
  2. grep "$(date --date='24 hours ago' '+%b %d')":通过 date 命令获取过去 24 小时的日期,过滤出这些日期的日志行。
  3. awk '{print $5}':使用 awk 提取日志中的错误类型(假设错误类型在第 5 列)。
  4. sort:对提取的错误类型按字母排序。
  5. uniq -c:对排序后的错误类型进行去重并统计出现频率。
  6. sort -nr:按频率倒序排列错误类型,显示最常见的错误类型。

5.2 批量重命名文件

在生产环境中,尤其是文件管理系统中,常常需要对一批文件进行批量重命名。假设你有一组文件,文件名包含了日期(如 report_20230101.txt),你需要将它们的日期部分统一修改。

例子:批量修改文件名中的日期格式
for file in report_*.txt; do mv "$file" "$(echo $file | sed 's/2023/2024/')"; done

步骤解析:

  1. for file in report_*.txt:遍历当前目录下所有以 report_ 开头、.txt 结尾的文件。
  2. mv "$file" "$(echo $file | sed 's/2023/2024/')":使用 sed 替换文件名中的 20232024,然后执行 mv 命令重命名文件。

5.3 备份与压缩文件

假设你需要定期备份一个目录中的文件,并压缩成 .tar.gz 格式,保留一个完整备份和多个增量备份。

例子:备份并压缩文件
tar -czf /backup/full_backup_$(date +\%F).tar.gz /data

步骤解析:

  1. tar -czf /backup/full_backup_$(date +\%F).tar.gz:使用 tar 命令创建 .tar.gz 格式的压缩包,并通过 $(date +\%F) 生成以当前日期为文件名的压缩文件。
  2. /data:指定需要备份的目录。

如果是增量备份,可以使用 --listed-incremental 选项来创建增量备份。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lc146LRU缓存——模仿LinkedHashMap

146. LRU 缓存 - 力扣(LeetCode) 法1: 调用java现有的LinkedHashMap的方法,但不太理解反正都不需要扩容,super(capacity, 1F, true);不行吗,干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…

Tomcat(76)如何在Tomcat中配置集群会话状态同步?

在Tomcat中配置集群会话状态同步是确保应用程序高可用性和冗余的重要步骤。以下是详细的配置步骤和代码示例,以确保在Tomcat集群中实现会话状态同步。 1. 配置Tomcat Cluster 首先,需要修改Tomcat的server.xml文件来配置集群和会话复制。 a. 编辑 ser…

CentOS 上如何查看 SSH 服务使用的端口号?

我们知道,linux操作系统中的SSH默认情况下,端口是使用22,但是有些线上服务器并不是使用的默认端口,那么这个时候,我们应该如何快速知道SSH使用的哪个端口呢? 1、通过配置文件查看 cat /etc/ssh/sshd_confi…

IoTDB Allocate WAL Buffer Fail Because out of memory

问题及现象 时序数据库 IoTDB 集群报错: The write is rejected because the wal directory size has reached the threshold 53687091200 bytes. You may need to adjust the flush policy of the storage storageengine or the IoTConsensus synchronization pa…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

厦门凯酷全科技有限公司深耕抖音电商运营

在数字经济飞速发展的今天,抖音电商平台以其独特的社交属性和庞大的用户基础,迅速成为众多品牌和商家的新战场。在这个充满机遇与挑战的市场中,厦门凯酷全科技有限公司凭借其专业的服务、创新的理念和卓越的执行力,成为了抖音电商…

探秘多AI Agent模式:机遇、应用与未来展望(5/30)

摘要:多 AI Agent 模式是一种强大的人工智能架构,它利用多个智能体(Agent)之间的协作与交互来解决复杂问题、执行多样化任务并模拟复杂系统行为。在这种模式中,每个 Agent 都具备独立的感知、决策和行动能力&#xff0…

java之集合(详细-Map,Set,List)

1集合体系概述 1.1集合的概念 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 1.2集合分类 集合分为单列集合和多列集合 Collection代表单列集合,每个元素(数据&#xff…

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

文章目录 关联文章一、CANoe加载诊断数据库cdd、dll文件二、CAPLdiagGenerateKeyFromSeed关联文章 UDS - 深论Security Access Service 27服务-安全访问状态转换 CDD文件——CANdelaStudio Vector——CAPL语言设计 CANoe诊断测试 相信读者基于Diagnostic/ISO TP Confighratio…

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中,通过工程化,区分不同环境、动态修改小程序appid以及自定义条件编译,解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时,这时候…

继电器控制与C++编程:实现安全开关控制的技术分享

在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…

C++ 【衔接篇】

大名鼎鼎的c实际上是由c语言扩展而来的,它最初是由本贾尼在20世纪80年代开发。目的是支持面向对象编程,同时保持c语言高效和可移植等优点。c是c的扩展,在一定程度上解决了c语言在特殊场景下的使用局限。 1、命名空间 在详细说明命名空间之前…

JAVA8、Steam、list运用合集

Steam运用 Java Stream API为开发人员提供了一种函数式和声明式的方式来表达复杂的数据转换和操作,使代码更加简洁和富有表现力。 1、使用原始流以获得更好的性能【示例:求和】 使用 int、long 和 double 等基本类型时,请使用IntStream、LongStream 和 DoubleStream 等基本流…

软考中级-软件设计师通过心路经验分享

执念,第四次终于通过了 没买书,下班后每天2小时,四个2个月终于过了 学习经验: 1.下班后学习真的靠毅力,和上学的时候考证不是一个状态,大家要及时调整,否则过程很痛苦 2.失败三次的经验&#xf…

分布式 Raft算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试: 第一轮是逻辑行测,25道题目,类似于公务员考试题目,要求90分钟内完成。第二轮是技术面试,主要是做一些数据结…

浅谈I-STARIS国际演艺集团为融合中国市场,开办的各类中式训练营

I-STARIS国际演艺集团给旗下各国演员们开办针对性的训练营,有针对中文基础的,有针对中国戏曲的,有针对中国武术的,不由让我们想到了老版《红楼梦》拍摄之前,演员们足足训练了三个月,才开始进入拍摄。1984年…

电脑怎么设置通电自动开机(工控机)

操作系统:win10 第一步,电脑开机时按del键进入bios页面。 第二步,选择advanced下的IT8712 Super IO Configuration 第三步,找到Auto Power On,将其从Power off设置为Power On 第四步,F10保存,大…

springboot+javafx使用aop切面导致的fx:id不能被注入问题

记录一个我遇到得问题 问题描述 我本来使用AOP切面来进行全局异常管理,但是使用AOP之后fxml中通过fx:id绑定得参数无法被注入 Slf4j Component Aspect public class GlobalExceptionAspect {AfterThrowing(pointcut "execution(* com.shkj.videoclassifica…