sed是一个非交互式的文本编辑器,sed一般适用于三种场合:
- 编辑相对于交互式文本编辑器而言太大的文件
- 编辑命令太复杂,在交互式式编辑器中难于输入的情况
- 需要对文件一次执行多个动作的情况
sed只是对缓冲区内副本进行编辑,因此在编辑完文件后要记得输出重定向到另一个文件
sed -option ‘‘编辑命令’ input-file > result-file
sed命令一般有三种用法:
- sed -option ‘编辑命令’ input-file
- sed -option -f 脚本文件 input-file
- 将命令插入脚本并设置为可执行文件,./脚本文件 input-file
sed命令常用的命令选项(option):
- -n 不打印所有行到标准输出(sed命令默认执行后打印所有行)通常与‘编辑命令p一起使用来打印特定行
- -e 将下一个字符串解析为sed编辑命令,说白了就是 -e后面接编辑命令,这样就可以一条sed命令执行多个编辑命令了
- -f 表示将调用sed脚本文件
sed命令定位文本的方法:
- x 指定行号
- x,y 指定行号范围
- /pattern/ 指定包含内容(pattern)的行
- /pattern/,x 指定从/pattern/到x行之间的行
- x,/pattern/ 指定从x行到/pattern/之间的行
- /pattern/,/pattern/ 指定从/pattern/到/pattern/之间的行
- x,y! 查询不包括x和y之间内容的行
- 元字符$ 表示最后一行
- /pattern/模式匹配中"." "*" “^” “$” 表示匹配“任意一个字符”和“前一个字符重复任意次(包括零次)”和“行首”和“行尾”与正则表达式相同
Examples:
- sed -n '1p' input.txt 表示只打印input.txt文件的第一行
- sed '1p' input.txt 打印完第一行后会继续打印input.txt全文内容
- sed -n '2,/hello/p' input.txt 打印从第二行到包含hello的行之间的所有内容
- sed -n '/hello/,/tt/p' input.txt 表示
- sed -n -e '/hello/p' -e '/tt/p' input.txt 打印含hello和tt的行,先打印含hello的第一行在打印含tt的第一行,然后才是含hello的第二行
- sed -n '/hello/,/hello/p' input.txt 打印hello之间的行,若含有奇数个含hello的行会从第一个含hello的行打印到最后一行
sed编辑命令:
- p 打印匹配行
- = 打印匹配行号
- a\ 在定位行号之后追加文本信息
- i\ 在定位行号之前插入文本信息
- d 删除指定行
- c\ 用新文本替换指定文本
- s 使用替换模式替换定位文本
- r 从另一个文件中读文本
- w 将文本写入一个文件
- y 变换字符
- q 第一个模式匹配完成后退出
- l 显示与八进制ASCII码等价的控制字符
- { ;} 在定位行执行命令组
- n 读取下一个输出行,用下一个命令处理新的行
- h 将模式缓冲区的文本复制到保持缓冲区
- H 将模式缓冲区的文本追加到保持缓冲区
- x 互换模式缓冲区和保持缓冲区的内容
- g 将保持缓冲区的内容复制到模式缓冲区
- G 将保持缓冲区的内容追加到模式缓冲区
PS: 模式缓冲区(Pattern Buffer):即“我们要把缓冲区内容输出到目标文件”所提到的缓冲区
保持缓冲区(Hold Buffer): sed命令有两个独立的缓冲区,保持缓冲区与模式缓冲区相对应
Example: sed -e '/hello/ h' -e ' /tt/H' -e '$G' 表示匹配到hello后复制保持缓冲区匹配到tt追加到保持缓冲区,执行到最后一行把保持缓冲区追加到模式缓冲区
常用命令:
- 插入文本 sed '指定地址 i\ text' 输入文件 在定位行号之前插一行
- 修改文本 sed '指定地址 c\ text' 输入文件 整行修改
- 删除文本 sed '指定地址d' 输入文件 删除行
- 替换文本 sed 's/被替换的字符串/新字符串/【编辑命令】' 输入文件 替换,默认打印所有内容,可通过-n ‘p'来打印指定行,“&”可代表被替换的字符串,非整行
- 写入新文件 sed -n '指定地址 w 输出文件' 输入文件 写入新文件
- 读入文本 sed '指定地址 r 被读取的文件名' 输入文件 类似与在指定地址后插入读入的文本
- 退出命令 sed '指定地址 q' 输入文件 常见打印前7行: sed '7q' input.txt
- 变换命令 sed 'y/被替换的字符序列/替换的字符序列/' 输入文件 单独替换字符而非整行,注意的是“序列”表示的意思是分别替换,y/12/ab/表示a替换1,b替换2
- 执行命令组 举个例子 命令:sed -e '/yes/p' -e '/yes/=' input.txt 命令:sed '/yes/{p;=}' input.txt 这俩命令等价
sed脚本文件写法:
#!/bin/sed -f
s/yes/tt/
2,3p
给脚本文件加执行权限:
chmod u+x 文件名
sed命令学习笔记
最新推荐文章于 2024-08-12 18:25:57 发布