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 上写东西了,临近年末写点什么吧