人人都会AI编程

增删改查、文本替换、行处理、批量编辑

更新时间:2026-07-12

在 Linux 环境下处理文本,“增删改查”不再局限于数据库的专用术语,而是渗透在日常的命令行操作中。得益于一大批专为行处理和文本流设计的小工具,你可以在不打开编辑器的情况下完成绝大多数文本转换工作。

1. 查:精准定位内容

查找是其他一切操作的前提。最常用的查找工具是 grep,它从文件或管道流中筛选出匹配指定模式的行。

grep "ERROR" /var/log/app.log        # 查找包含 ERROR 的行
grep -i "error" file.txt             # 忽略大小写
grep -v "DEBUG" file.log             # 排除匹配的行
grep -n "function" main.c            # 显示行号
grep -r "config" /etc/               # 递归搜索目录下所有文件

如果需要处理更复杂的字段定位,awk 则是更精细的工具。例如,输出日志中第 3 列值大于 100 的行:

awk '$3 > 100' data.log

2. 增:插入、追加与生成

文本的“增”通常指在特定位置添加新行或新内容。

  • echo 和重定向快速追加一行到文件末尾:
  echo "192.168.1.10 server1" >> /etc/hosts
  
  • sed 在匹配行之前(i)或之后(a)插入内容:
  sed -i '/^Listen 80$/a Listen 8080' httpd.conf  # 在 Listen 80 行后添加一行
  sed -i '1i # 这是新增的注释行' config.ini        # 在第一行前插入
  
  • cat 和 here-document 批量生成多行文本:
  cat > newfile.txt << EOF
  第一行内容
  第二行内容
  EOF
  

3. 删:删除行或过滤内容

删除操作本质上就是“不输出”不需要的行,通常通过反向过滤或 sed 的删除命令完成。

  • 删除匹配的行(sedd 命令):
  sed -i '/^#/d' config.cnf           # 删除所有注释行
  sed -i '/^$/d' script.sh            # 删除所有空行
  sed -i '5,10d' file.txt             # 删除第5到第10行
  
  • grep -v 反向过滤,相当于在不修改原文件的情况下展示“删除后”的效果:
  grep -v "^$" messy.txt              # 显示时跳过空行
  

4. 改:文本替换与内容修改

修改最常见的形式是查找并替换,sed 是这一领域的标准工具。

sed -i 's/old-text/new-text/g' file.txt       # 替换所有匹配项
sed -i '/^server/s/80/8080/' httpd.conf       # 仅在以 server 开头的行替换
sed -i 's/^/PREFIX: /' data.txt               # 在每行行首添加字符串
sed -i 's/, */\t/g' data.csv                  # 将逗号分隔符替换为制表符

对于更复杂的字段级修改,awk 可以非常自然地重新排列或计算字段:

awk -F, '{print $3, $1, $2}' data.csv         # 调整列的顺序
awk -F: '$1=="user"{$3=2000}1' /etc/passwd    # 修改特定用户的 UID

这里 1awk 中打印当前行的简写,$1$2 代表字段。

5. 批量编辑:处理多个文件

日常运维常常需要对一批文件进行统一修改,常见的方法是结合 findsed 或使用 for 循环。

  • 递归替换某目录下所有 .conf 文件中的 IP 地址:
  find /etc/config/ -name "*.conf" -exec sed -i 's/10\.0\.0\.1/10.0.0.2/g' {} +
  
  • for 循环批量重命名文件(例如将所有 .txt 改为 .md):
  for f in *.txt; do mv "$f" "${f%.txt}.md"; done
  
  • 对多个文件的第3行进行统一修改(例如添加注释符号):
  sed -i '3s/^/## /' *.conf
  
  • 使用 parallel 工具(需要单独安装)加速大规模处理:
  find . -name "*.log" | parallel gzip {}
  

实用要点

  • 先预览,再落盘:执行 sed -i(直接修改文件)前,最好去掉 -i 先运行一次,确认输出无误。
  • 备份与版本控制:在批量修改关键配置前,养成 cp file file.bak 或用 git 暂存的习惯。
  • 组合而非重写:不要试图用一个工具完成所有操作,把“查”交给 grep,把“替换”交给 sed,把“字段重组”交给 awk,用管道串联它们,这才是 Linux 文本处理哲学的精髓。

掌握上述增删改查与批量编辑方法后,你将能够以极高的效率处理服务器配置、日志分析、数据清洗等日常任务,而无需每次都打开全功能编辑器。这些命令行的组合能力,正是 Linux 系统可管理性和自动化优势的直接体现。