sed | 一些关于 sed 的笔记

sed 总结


sed 语法

sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]

---
参数:
   -e<script> 以选项中指定的script 来处理输入的文本文件
   -f<script文件> 以选项中指定的script 文件来处理输入的文本文件
   -n 禁用 pattern space  的默认输出
```shell
##
##  打印结果
## http://www.suon.co.uk
## http://www.suon.co.uk
#echo "http://www.suon.co.uk/product/1/7/3/" | sed  's;\(http://[^/]*\)/.*;\1;p'


## 打印结果
## http://www.suon.co.uk
#echo "http://www.suon.co.uk/product/1/7/3/" | sed   's;\(http://[^/]*\)/.*;\1;'

## 打印结果
## 空的 啥也没有 ,因为 -n 把  pattern space 的 自动打印给禁用了
#echo "http://www.suon.co.uk/product/1/7/3/" | sed  -n  's;\(http://[^/]*\)/.*;\1;'

## 打印结果
## http://www.suon.co.uk
echo "http://www.suon.co.uk/product/1/7/3/" | sed  -n  's;\(http://[^/]*\)/.*;\1;p'

动作说明:
a 新增
s 取代
d 删除
i 插入
p 打印


## 常见的替换

sed -i 's/zhaosi/zhangbuda/g' b.txt

找到  zhaosi 然后替换成 zhangbuda   替换pattern 是  sed -i 's/原内容/新内容/g' b.txt

注意 -i 表示直接在原文件替换, g 表示全局替换 

当然 不建议这种不备份的直接修改原文件。

改进1

sed -e 's/zhaosi/zhangbuda/g' b.txt  > c.txt 

改进2

sed -i.bak 's/zhaosi/zhangbuda/g' b.txt       # 会对原文件 b.txt 备份为 b.txt.bak

## pattern space  和 hold space

```shell
1.
echo "apple" | sed 'h; s/apple/banana/; g'
2.
echo "apple" | sed 'h; s/apple/banana/;'
3.
echo "apple" | sed 'h; s/apple/banana/g;'
4.
echo "apple" | sed 'h; s/apple/banana/;g;'

使用正则

注意 ^ 表示行首 $ 表示行尾

sed -i -E ‘s/^.txt$/.cpp/g’ b.txt #把以 每行 只有 .txt 的记录替换成 .cpp

其他操作

sed -e '$aEND | '$(wc -l < e.txt) e.txt > temp.txt && mv temp.txt e.txt
## 把 192.168.1.100 给打印出来
echo 'inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0' | sed -E 's/.*addr://g' | sed -E 's/[[:space:]]Bcast:.*//g'
### 删除倒数第一条记录
sed -i '$h;$d;${x;s/^\(.*\)\n\(.*\)$/\2/;p}' 1222_7
### 删除倒数第二条记录
sed -i 'N;$!P;D'
## 脚本实现 删除倒数第三行 的内容   #### 把 1222_7 替换成 待修改的文件名
#!/bin/bash
#目前可以用来删除倒数第3行
linenum=`cat 1222_7 | wc -l`
linenum_last3=`expr $linenum - 3`
#echo -e "$linenum_last3"
sed -i ''$linenum_last3' d' 1222_7

补全电话号码

###################
1222_7
1|18970505859|zhangsan
2|18878581888|lisi
3|19970505859|wanger
#######################

sed -i.bak 's/|\([0-9]\{10\}\)|/|1\1|/' 1222_7

好久没在 csdn 上写东西了,临近年末写点什么吧
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值