sed 命令 修改 文本实战

在日常运维工作中 用 sed 命令 来修改文本特别方便,下面将用一个工作中的案例 来演示一下 sed 命令配合正则表达式的应用。
我有一个文本 history.txt ,这个文本是另一台机器上的命令记录,我想将其中一些命令提取出来,放到脚本里面,供以后重复使用。
先来看看 history.txt 文本的内容:

cat history.txt

在这里插入图片描述
第一个需求,我想把 history.txt 文本里面的 第 7行到 41行 删除,这些命令是我不需要的 :

### 使用 sed 命令 的 'd' 指令 删除
sed '7,41d' history.txt   

在这里插入图片描述

注意看截图上的文本输出,第7行到41行不见了,也就是被删除了。目前真正的 history 文档还没有修改,如果要修改生效,请加上 -i 参数:

sed -i '7,41d' history  

第二个需求,我想把 history.txt 文档里面 每行命令之前的 数字跟空格去掉,最终效果如下:

在这里插入图片描述

具体实现:
先看看 命令前面的那些字符串的结构,以 ’ 145 ’ 为例子, 描述出来就是" 空格开头+空格+数字+空格",空格与数字的 数量 为 >=1, 然后将 这种格式转换成 正则表达式:^匹配开头,空格 匹配空格,[[:digit:]] 匹配任意数字,* 这个符号表示 重复0次或者多次, 那么 匹配 字符串 ’ 145 ’ 的正则表达是

# ^+空格+* 表示 匹配 以一个或者多个空格开头,  [[:digit:]]* 接表示多个数字,
# 空格+*,表示数字后面 还有 一个或者多个空格
"^ *[[:digit:]]* *"
# 使用 sed 命令的 's' 替换指令 将正则表达式匹配的内容替换成 空内容(相当于删除)
sed 's#^ *[[:digit:]]* *##' history.txt  

展示一下命令执行前跟执行后的区别:

替换前的文档内容

sed 替换后的效果

确认结果符合预期后,再加上 -i 参数修改 history.txt 文档 的内容。未加 -i 参数 只是 修改 sed 流里面的 内容,修改后的内容并未写入文档。

sed -i 's#^ [[:digit:]]* *##' history.txt  

总结: sed 命令 的 ‘s’ 替换指令,配合正则表达式功能十分强大,sed 命令的基本用法可以参考之前写的另外的文章。要想灵活使用 sed 命令,就多多练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值