[收藏学习]shell之sed_1
1.sed 的运行:
sed 从文本行或标准输入中读取数据,将之拷贝到编辑缓冲区,然后开始执行命令行或脚本的第一个命令,重复直到结束。
2.sed 的调用:
sed options script file
2-1.保存 sed 的输出,使用重定向:
$ sed 'commands' inputfile > outputfile
2-2.sed 查询文本的方式:
- 行号,可以是一个数字,也可以是行号范围
- 正则表达式
sed 定位文本的一些方式:
x x 为一行号
x,y 表示行号范围从 x 到 y
x,y! 查询不包含指定行号 x 和 y 的行
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 在给定行号上查询包含模式的行
x,/pattern/ 通过行号和模式查询匹配行
2-3.sed 基本编辑命令
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制 ASCII 代码等价的控制字符
{} 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
3.sed 命令举例:
测试文本:
$ cat text
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:00.
The local nurse Miss P.Neave was in attendance.
a)使用 p 打印:
sed -n '2p' text #只(-n)打印第 2 行
sed -n '1,3p' text #只打印 1 至 3 行
sed -n '/only/p' text #匹配单词 only,并打印该行
sed -n '4,/The/p' text #在指定的第 4 行匹配单词 The,并打印该行
sed -n '/\$/p' text #匹配字符 $,前面要加反斜杠 \
sed -n '1,$p' text #打印整个文本,$ 意为最后一行
sed -n '/.*ing/p' text #匹配以 ing 结尾的任意单词
sed -n '/music/=' text #打印匹配 music 的行号,如果打印全部文本并打印匹配的行号,用 -e
sed -n -e '/music/p' -e '/music/=' text #打印匹配行及该行行号
b)附加文本:
a\
sed "3a\test" text #在第 3 行后新增一行文本 test
sed "/The/a\test" text #在匹配 The 的行后新增一行文本 test
c)插入文本:i\,在匹配行之前增加文本。具体和 b) 类似。
d)修改文本:
c\
sed "1c\test" text #将第 1 行替换为文本 test
sed "/The/c\test" text #将匹配 The 的行替换为文本 test
e)删除文本:
sed '[address[,address]]d' file #命令格式
sed '1,3d' text #删除 1 至 3 行
sed '/The/d' text #删除匹配 The 的行
d)替换文本:
[address[,address]]s/pattern/replacement-pattern/[g p w n]
sed 's/night/NIGHT/' text #替换 night 为 NIGHT
sed 's/\$//' text #删除 $ 符号,没有替代文本留空
sed 's/[t,T]he/Wow/w file.out' text #将匹配的 [t,T]he 替换为 Wow 并输出到文件 file.out
e)替换修改字符串:
sed -n 's/played/from Canada &/p' text #查找 played 并在这之前增加字符串 "from Canada ",最后输入该行
f)将 sed 结果写入文件:
sed '[address[,address]] w file.out' file.in #命令格式
sed '1,2 w file' text #将文件 text 的第 1,2 行写入文件file
g)从文件中读取文本:
sed 'address r file.in' file #在 address 后放置文本 file.in
h)匹配后退出 sed:
sed 'address q' file
PS:
sed 元字符集:
- ^ 锚定行的开始。/^sed/ 匹配所有以 sed 开始的行
- $ 锚定行的结束。/sed$/ 匹配所有以 sed 结束的行
- . 匹配一个非换行字符。/s.d/ 匹配 s 后接一个字符,然后是 d
- * 匹配零或多个字符。
- [] 匹配一个指定范围的字符。/[sS]ed/ 匹配 所有 sed 或 Sed
- [^] 匹配一个不在指定范围的字符。/[^A-RT-Z]ed/ 匹配不包含 A-R T-Z 的一个字母的开头
- & 保存搜索字符用来替换其他字符。s/sed/**&**/,匹配的 sed 变成 **sed**
- \(..\) 保存匹配的字符。s/\(sed\)er/\1ers,匹配的 seder 变成 seders
- \< 锚定单词的开始。/\<sed/ 匹配所有以 sed 开头的单词的行
- \> 锚定单词的结束。/sed\>/ 匹配所有以 sed 结束的单词的行
- c\{m\} 字符 c 重复 m 次。/g\{5\}/ 匹配包含 5 个 g 的行
- c\{m,\} 字符 c 至少重复 m 次。
- c\{m,n\} 字符 c 至少重复 m 次,至多重复 n 次。
参见:http://www.cnblogs.com/geb515/archive/2012/03/31/2427578.html
赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。


浙公网安备 33010602011771号