shell编程:sed - 流编辑器(6)

1.文本处理

(1)删除 HTML 标签

删除 HTML 标签:sed 's/<[^>]*>//g' sample.html
详细解释
• <[^>]*>:匹配 HTML 标签
• <:字面匹配
• [^>]*:非>字符的任意长度
• >:字面匹配
• g:全局替换为空
• 提取 HTML 中的纯文本
/<[^>]*>//是将 html 标签替换为空

(2)合并多行到一行

合并多行:sed ':a;N;!ba;s/\\n/ /g' file.txt \| head -1 **详细解释**: • :a:定义标签 a • N:读取下一行到模式空间 • !ba:如果不是最后一行,跳转到 a
• s/\n/ /g:将所有换行符替换为空格
• 将整个文件合并为一行

(3)给文件添加行号

添加行号:sed '=' file.txt | sed 'N; s/\n/ /'
详细解释
• =:打印当前行号
• sed '='输出行号和内容分行
• | sed 'N; s/\n/ /':读取两行,用空格替换换行
• 实现类似 nl 命令的功能
这个命令的执行结果是行号 内行内容的格式,行号后不跟冒号,比 grep 加行号更可视化

(4)将每行的第一个单词转为大写

首单词转大写:sed 's/^\([a-z]\)\([a-zA-Z]*\)/\U\1\E\2/' file.txt
详细解释
• ^\([a-z]\):捕获第一个小写字母
• \([a-zA-Z]*\):捕获剩余字母
• \U\1:将第一个捕获组转为大写
• \E:结束大写转换
• \2:引用第二个捕获组
• 使用 sed 的大小写转换功能

2.配置文件处理

(1)注释掉配置项

注释掉配置项:sed 's/^\(app\.debug=\)/#\1/' config.txt
详细解释
• ^\(app\.debug=\):捕获以"app.debug="开头的行
• \.:转义点号
• #\1:替换为#加上捕获的内容
• 实现注释功能

(2)取消注释

取消注释:sed 's/^#\+\(.*app\.maintenance.*\)/\1/' config.txt
详细解释
• ^#\+:行首一个或多个#
• \(.*app\.maintenance.*\):捕获包含 app.maintenance 的内容
• \1:只保留捕获组内容
• 移除注释符号

(3)修改配置值

修改配置值:sed '/^app\.debug=/s/=.*/=false/' config.txt
详细解释
• /^app\.debug=/:选择以 app.debug=开头的行
• s/=.*/=false/:将=后所有内容替换为=false
• 先选择行,再执行替换
• 精确修改配置值

相关推荐
xyz5994 分钟前
如何在 WSL 中删除指定版本的 Ubuntu 以及安装
linux·运维·ubuntu
亚空间仓鼠32 分钟前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
minji...1 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
虚伪的空想家2 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
the sun342 小时前
从 QEMU 直接启动到 U-Boot 引导:嵌入式 Linux 启动流程的本质差异
linux·运维·服务器
草莓熊Lotso2 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·linux·运维·服务器·数据库·c++·mysql
ShineWinsu2 小时前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作
-SGlow-2 小时前
Linux相关概念和易错知识点(52)(基于System V的信号量和消息队列)
linux·运维·服务器
江畔何人初2 小时前
TCP的三次握手与四次挥手
linux·服务器·网络·网络协议·tcp/ip
Trouvaille ~2 小时前
【MySQL篇】数据库操作:从创建到管理
linux·数据库·mysql·oracle·xshell·ddl