1. Sed 文本处理命令

# 删除包含 ICON="..." 的行
sed -i '/ICON="[^"]*"/d' "aa.html"

# 提取包含 ICON="..." 的行并保存到 bb.html
sed -n '/ICON="[^"]*"/p' aa.html > bb.html

# 删除行内的 ICON="..." 部分
sed -i 's/ICON="[^"]*"//g' "aa.html"

Linux 文本处理命令笔记

一、删除文件中的 ICON="..." 内容

问题描述

文件中包含 ICON="data:image/png;base64,xxx" 格式的内容,需要删除这部分。

解决方案

1. 使用 sed 命令(推荐)

# 基本删除
sed -i 's/ICON="[^"]*"//' 文件名

# 同时删除后面的空格
sed -i 's/ICON="[^"]*" *//' 文件名

# 全局匹配(推荐)
sed -i 's/ICON="[^"]*" *//g' 文件名

# 使用扩展正则表达式
sed -i -E 's/ICON="[^"]*"//' 文件名

2. 使用 awk 命令

awk '{gsub(/ICON="[^"]*"/, ""); print}' 文件名 > 临时文件 && mv 临时文件 文件名

3. 使用 perl 命令

perl -pi -e 's/ICON="[^"]*"//' 文件名

注意事项

  • -i 参数会直接修改原文件,建议先备份:cp 文件名 文件名.bak
  • 不确定时先去掉 -i 测试

二、sed 与 perl 的区别

设计理念

工具定位特点
sed专门的流编辑器轻量、快速、系统预装
perl通用编程语言功能强大、正则引擎完善

正则表达式能力对比

特性sedperl
标准正则
非贪婪匹配有限支持
零宽断言
递归匹配

典型使用场景

sed 适合:

  • 简单的查找替换
  • 删除/插入行
  • 提取特定行范围
  • 快速文本过滤
sed '/^$/d' file.txt           # 删除空行
sed '3,5d' file.txt            # 删除3-5行
sed 's/^[ \t]*//' file.txt     # 删除前导空白

perl 适合:

  • 复杂正则表达式匹配
  • 多行模式处理
  • 需要编程逻辑的场景
  • 数据转换和报表生成
perl -0777 -pe 's/start.*?end//gs' file.txt   # 跨行非贪婪匹配
perl -ne '$sum += $_; END {print $sum}'       # 求和计算

选择建议

场景推荐工具原因
简单替换sed快速、轻量、预装
复杂正则perl正则引擎更强大
单行处理sed性能好
需要变量/循环perl完整编程能力
嵌入式系统sed体积小,无需安装

三、sed 命令中 g 标志的作用

区别说明

命令行为
sed 's/pattern/replacement/'只替换每行第一个匹配
sed 's/pattern/replacement/g'替换每行所有匹配

示例演示

# 输入:ICON="data1" xxx ICON="data2" yyy

# 不加 g(只删除第一个)
sed 's/ICON="[^"]*" *//'
# 结果:xxx ICON="data2" yyy

# 加 g(删除所有)
sed 's/ICON="[^"]*" *//g'
# 结果:xxx yyy

在你的场景中

由于一行通常只有一个 ICON="...",加不加 g 结果相同,但推荐加 g 养成习惯,更安全。


四、正则表达式 "[^"]*" * 详解

逐字符解析

符号含义说明
"匹配双引号开始引号
[^"]匹配非双引号的任意字符^ 表示"非"
*匹配0次或多次贪婪匹配
"匹配双引号结束引号
空格匹配空格字符字面空格
*匹配0次或多次匹配后面的空格

可视化理解

"[^"]*" *
│ ││ │ │
│ ││ │ └─ 匹配0个或多个空格
│ ││ └─── 结束引号
│ │└───── 匹配0个或多个非引号字符
│ └────── 字符集:除双引号外的任何字符
└──────── 开始引号

匹配示例

输入匹配结果说明
"hello""hello"无空格,*匹配0次
"hello" "hello" 匹配1个空格
"hello" "hello" 匹配2个空格
"hello world""hello world"内部空格不影响
"a"b"c""a"遇到第二个引号停止

常见变体

# 匹配0个或多个空格
" *"

# 匹配1个或多个空格
" +"

# 匹配0个或多个空白字符(空格、tab等)
"\s*"

# 匹配前后的空格
' *ICON="[^"]*" *'

# 处理 ICON = "..." 格式
'ICON\s*=\s*"[^"]*"\s*'

五、常用命令速查表

功能命令
删除 ICON="..."sed -i 's/ICON="[^"]*" *//g' 文件
删除空行sed -i '/^$/d' 文件
删除行首空格sed -i 's/^[ \t]*//' 文件
删除行尾空格sed -i 's/[ \t]*$//' 文件
备份后编辑cp 文件 文件.bak && sed -i 's/old/new/g' 文件

标签: none

添加新评论