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 表示全局替换 当然 不建议这种不备份的直接修改原文件。改进1sed -e 's/zhaosi/zhangbuda/g' b.txt > c.txt 改进2sed -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 上写东西了,临近年末写点什么吧