Linux重定向与VI编辑器核心技术解析
1. Linux 输入输出重定向的本质解析1.1 文件描述符的底层机制在Linux系统中每个进程启动时都会自动打开三个标准文件描述符File Descriptor0号文件描述符STDIN标准输入默认对应键盘1号文件描述符STDOUT标准输出默认对应显示器2号文件描述符STDERR标准错误输出默认也对应显示器这种设计源于Unix的一切皆文件哲学。通过文件描述符抽象系统可以统一处理各种I/O设备。当我们在终端执行命令时shell会为命令创建子进程并继承这三个标准文件描述符。重定向的本质就是修改这些默认的文件描述符绑定关系。例如command file.txt这个操作实际上是将1号文件描述符从显示器重定向到file.txt文件。具体实现过程是打开file.txt文件如果不存在则创建通过dup2()系统调用将file.txt的文件描述符复制到1号描述符关闭原来的1号描述符1.2 重定向操作符的完整分类基础重定向操作符标准输出重定向覆盖标准输出重定向追加标准输入重定向2标准错误重定向覆盖2标准错误重定向追加高级组合用法# 合并标准输出和错误输出到同一文件 command file 21 # 将标准输出和错误输出分别重定向到不同文件 command stdout.txt 2 stderr.txt # 输入输出同时重定向 command input.txt output.txt # 使用heredoc作为输入 command EOF multi-line input EOF1.3 重定向的进程间通信应用管道pipe是重定向的特殊形式本质上是创建一个内存缓冲区将前一个进程的标准输出连接到后一个进程的标准输入command1 | command2这相当于command1 tempfile command2 tempfile rm tempfile实际开发中管道常用于构建数据处理流水线。例如统计日志中的错误出现次数grep ERROR app.log | awk {print $5} | sort | uniq -c | sort -nr注意管道会创建匿名管道文件但不会在磁盘上留下实际文件。管道缓冲区大小通常为64KB可通过ulimit -p查看2. VI编辑器深度操作指南2.1 VI的三种模式解析VI编辑器采用模式化设计这是其高效操作的核心命令模式Normal Mode启动VI后的默认模式所有按键都对应编辑命令而非文本输入例如dd删除整行yy复制当前行插入模式Insert Mode通过i/I/a/A/o/O等命令进入此时按键输入会作为文本内容按ESC返回命令模式末行模式Command-line Mode在命令模式下按:进入可执行保存、退出、搜索替换等操作例如:wq保存并退出2.2 高效移动与编辑技巧光标移动命令模式下h/j/k/l左/下/上/右移动w/W移动到下一个单词开头小写w按标点分词b/B移动到上一个单词开头0行首^行首非空白字符$行尾gg文件开头G文件末尾50%跳转到文件50%位置文本编辑高级技巧ci修改双引号内的内容change insidedtx删除直到下一个x字符xp交换当前字符与下一个字符缩进当前行取消缩进:m,n co p将m到n行复制到p行后2.3 寄存器与宏操作VI提供多个寄存器类似剪贴板存储文本无名寄存器默认存储最近删除或复制的内容数字寄存器0-90存储最近复制内容1-9存储删除历史命名寄存器a-z用户自定义寄存器示例操作ayy # 复制当前行到寄存器a ap # 粘贴寄存器a内容宏录制qa # 开始录制宏到寄存器a ...操作... q # 停止录制 a # 执行寄存器a中的宏3. 重定向与VI的联合应用3.1 通过重定向批量编辑文件结合find和VI实现批量替换find . -name *.txt -exec vi -c %s/old/new/g -c wq {} \;使用VI过滤文件内容# 使用VI删除文件中的空行并保存 vi file.txt EOF :g/^$/d :wq EOF3.2 利用重定向进行VI配置创建.vimrc配置文件的便捷方法cat ~/.vimrc VIMRC set number syntax on set tabstop4 set expandtab VIMRC3.3 调试脚本时的重定向技巧在脚本开发中可以临时重定向VI的输出# 将diff结果用VI查看 diff file1 file2 | vi -捕获命令输出并直接编辑vi (grep pattern *.log)4. 高级技巧与故障排查4.1 重定向的常见问题问题1重定向后文件内容被清空# 错误示例重定向和过滤同一文件 grep error logfile logfile解决方法使用临时文件或sponge工具grep error logfile tmp mv tmp logfile # 或者 grep error logfile | sponge logfile问题2管道中的命令提前退出command1 | command2当command1异常退出时command2可能无法获取完整输入。解决方法set -o pipefail # 使管道中任一命令失败则整个管道失败 command1 | command24.2 VI的实用配置建议提高编辑效率的.vimrc配置 显示设置 set number 显示行号 set cursorline 高亮当前行 set scrolloff5 保持上下5行上下文 搜索设置 set hlsearch 高亮搜索结果 set ignorecase 忽略大小写 set smartcase 有大写字母时区分大小写 缩进设置 set autoindent 自动缩进 set tabstop4 Tab显示为4空格 set shiftwidth4 自动缩进使用4空格 set expandtab 将Tab转换为空格 快捷键映射 nnoremap C-s :wCR Ctrls保存 inoremap jk ESC 用jk快速退出插入模式4.3 性能优化技巧处理大文件时的VI优化:set nobackup nowritebackup noswapfile 禁用临时文件 :set lazyredraw 延迟重绘 :set syntaxoff 关闭语法高亮使用VI的二进制模式查看文件vi -b binaryfile在VI中可使用:%!xxd转换为十六进制查看:%!xxd -r转换回二进制

相关新闻

DAC38RFxx的PAP增益状态机:原理、配置与系统级保护策略

DAC38RFxx的PAP增益状态机:原理、配置与系统级保护策略

1. 项目概述与核心价值在射频与高速数据转换系统的设计里,我们工程师最头疼的问题之一,就是如何保护那颗娇贵且昂贵的数模转换器(DAC)核心。你肯定遇到过这种情况:一个突发的强信号或者算法上的一个疏忽,导…

2026/10/21 20:48:55 阅读更多 →
性能测试需求分析:从业务场景到JMeter配置的完整落地指南

性能测试需求分析:从业务场景到JMeter配置的完整落地指南

1. 项目概述:为什么性能测试始于需求分析? 如果你用过JMeter,或者正准备用它来做性能测试,那你大概率已经知道怎么录制脚本、添加断言、配置线程组了。网上铺天盖地的教程都在教这些“怎么做”的步骤,但很多人一上来就…

2026/10/20 21:09:52 阅读更多 →
双通道同步采样SAR ADC:ADS92x4R在工业与医疗精密信号采集中的应用

双通道同步采样SAR ADC:ADS92x4R在工业与医疗精密信号采集中的应用

1. 项目概述:为什么需要双通道同步采样SAR ADC?在工业自动化、高端医疗成像或者精密测试测量领域,工程师们常常会遇到一个棘手的难题:如何在同一时刻,精确捕获两路相关的模拟信号?比如,在光学编…

2026/10/22 7:42:05 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/21 21:32:28 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:50:56 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 16:24:48 阅读更多 →