sed命令
sed参数命令说明
sed是字符流编辑器,文件数据像流水线被处理加工
功能
sed 命令是操作,过滤和转换文本内容的强大工具
- 常用功能有增删改查(增加,删除,修改,查询
- 其中查询的功能最常用的
- 另外两大功能
- 过滤(过滤指定字符串)
- 取行(去除指定行).
参数
-n 取消默认的sed软件的输出 常与 sed 命令 的p连用
-e 一行命令语句可以执行多条sed命令
-f 选项后面可以接sed脚本的文件名
-r 使用正则扩展表达式 默认情况下sed只识别基本正则表达式
-i 直接修改文件内容,而不是输出终端,如果不适用-i 选项 sed软件只是在修改在内存中的数据
命令
a 追加 在指定行后添加一行或多行文本
c 取代指定的行
d 删除指定的行
D 删除模式空间的部分内容,知道遇到换行符\n 结束操作,与多行模式有关
i 插入,在指定的行前添加一行或多行文本
h 把模式空间的内容复制到保持空间
H 把模式空间的内容追加到保持空间
g 把保持空间的内容复制到模式空间
G 把保持空间的内容追加到模式空间
x 交换模式空间和保持空间的内容
l 打印不可见的字符
n 清空模式空间,并读取下一行数据并追加到模式空间
N 不清空模式空间,并读取下一行数据并追加到模式空间
p 打印模式空间的内容,通常 p 会与选项-n 一起使用
P(大写) 打印模式空间的内容,直到遇到换行符\你结束操作
q 退出 sed
r 从指定文件读取数据
s 取代,s#old#new#g==>这里 g 是 s 命令的替代标志,注意和 g 命令区分
w 另存,把模式空间的内容保存到文件中
y 根据对应位置转换字符
:label 定义一个标签
t 如果前面的命令执行成功,那么就跳转到 t 指定的标签处,继续往下执行后 续命令,否则,仍然继续正常的执行流程
sed匹配范围
匹配文本范围
| 范围 | 解释 |
|---|---|
| 空地址 | 全文处理 |
| 单地址 | 指定文件某一行 |
/pattern/ |
被模式匹配到的每一行 |
| 范围区间 | 10,20 十到二十行,10,+5第10行向下5行,/pattern1/,/pattern2/ |
| 步长 | 1~2,表示1、3、5、7、9行,2~2两个步长,表示2、4、6、8、10、偶数行 |
范围表达
| sed命令语法 | 作用 |
|---|---|
| 3 | 操作第三行 |
| 3,6 | 操作3~6行 ,包括3和6行 |
| 3,+5 | 操作3~3+5(8)行 包括3,8行 |
| 1~2 | 步长为2 操作1,3,5,7..行 |
| 3,$ | 对3到末尾行操作,包括3行 |
| /yuchao/ | 对匹配的字符串操作 |
| /yuchao/,/chaoge/ | 对匹配字符yuchao到chaoge的行操作 |
| /yuchao/,$ | 对匹配字符yuchao到结尾的行操作 |
| /yuchao/,+2 | '/yuchao/,+2p',打印匹配到yuchao的行,包括其后2行 |
命令操作
追加操作
* 增表示在指定的行与行之间 添加新的字符数据
"a":追加文本到指定行,记忆方法:a 的全拼是 apend,,意思是追加
"i":插入文本到指定行前,记忆方法:i 的全拼是 insert,意思是插入
\n 多行添加
sed -i '2a This is vory good' 文件
sed -i '2i THIE tai bei ' 文件
sed -i '3a This my is sjog \n THis his is opppen' 文件
# 语法 sed '行号a 字符数据' 源文件 sed '行号i 字符数据' 源文件
每一行下面添加一行
sed -i 'a heheihei' stude.txt
删除操作
1 删除1,2,4行
# 语法是用分号隔开多个命令
sed -i '1d;2d;4d' 文件
2 删除字符串的行
sed -i '/game/d' 文件
3 集合正则
#sed -i '/g.*e/d;/h*p/d'
4 感叹号取反
sed -i '/yuchao/!d' 文件
单引号,双引号,无引号,反引号
单引号所见即所得,单引号内的内容会原样输出,结合sed能识别单引号中的正则表达式符号
双引号也是输出引号内的字符串,双引号会把变量,命令等先解析出结构,然后在输出最终内容
查询输出
sed 打印命令p 打印sed正则处理后的数据,并且sed默认打印模式空间,可以使用 -n 参数取消。
*固定用法只要使用p 就是想输出指定数据必然 用-n取消默认打印
ip add | sed -n '/^3/p'
使用q命令,实现head命令的作用,提取文件前几行数据
sed 替换操作
替换整行命令 c
# 语法
sed -i '行号c替换内容' 文件
替换具体内容命令s操作
命令格式:
sed [options] [sed-commands] [input-file]
sed [选项] [sed命令] [输入文件]
选项:
-n 取消默认的sed输出,常与sed命令的p连用
-r 使用拓展正则
-i 将修改结果写入文件
-e 多个sed命令操作
命令: sed -n '15,24p' test1.txt 命令式在 '' 对行号,正则表达式//操作命令
p 输出处理过的行
a append 追加
i insert 插入
d 删除
; 命令分隔;执行多条命令
替换符-前面:
Ns 只替换第几行 如3s###
s 替换模式 s###
c 替换指定行的内容
标识符-后面: (标识符为//或##替换操作中)
g 全局替换
N 每行第几次匹配的对象
空 只匹配第一次内容
i 忽略大小写匹配
# 替换格式 全部替换使用 g 替换操作可以选取匹配到的替换字符 比如第一个或第二个 在最后标识符 标记次数 's#替换关键词#替换后的内容#2'
命令格式:
sed 's#替换关键词#替换后的内容#g' chaoge.log
分组替换
语法:
sed软件也提供了 \(\)分组功能
使用\1引用第一个括号的数据
\2引用第二个括号的数据
sed最多记住9个分组
sed与扩展正则表达式
sed -r参数,识别扩展正则;\s 表示单个空格;-e 多次编辑,写入多次sed命令
操作习题总结
# sed一般来说 范围查找 在命令操作中'' 用 , 分隔行号,要是需要使用正则 表达式在 //写 ; 添加多行 在添加文本之间添加换行符 \n
# 操作范围 连续的行数操作 在行号间 使用逗号 , 多个行操作使用冒号 ; 隔行操作使用~ 1~2 隔1行操作
1 查找包含love后Linux的行 使用扩展-E 整体字符使用()
#sed -rn '/(love|linux)/p' file.txt
#sed -rn '/love|linux/p' file.txt
*替换操作sed -n 's#I#我#gp' file.txt
1 将第二次匹配的上的a替换为A
sed -n 's#a#A#2p' file.txt
2 删除字符串game行之后的2行
sed '/game/,+2d' file.txt
3 取反删除只保留1和2行
sed -r '1,2!d' file.txt
4 提取ip地址 分组提取法sed是对文本像流水线一样处理,分组就是通过对处理的文本流 截取的字符两边特点进行截取 并提取替换输出
ifconfig eth0 | sed -nr 's#.*inet\s(.*)\snetmask.*#\1#p'
掐头去尾 对提取的字符两边内容进行替换达到删除效果
ifconfig eth0 | sed -nr -e '2s#.*et\s##' -e 's#\snet.*##p'
5 修改DNS 分组法
sed -rn '2s#(.*)\s2.*#\1 8.8.8.8#p' resolv.conf
6 提取系统所有用户名
cat /etc/passwd |sed -rn 's#(.*):(.*):(.*):(.*):(.*):(.*):(.*)#\1#p'
# 把用户名后:所有字符替换掉
sed 's#:.*##p' /etc/passwd -n
# 分组法()使用.*注意边界值
#sed -rn 's#(.*):x.*#\1#p' /etc/passwd
7 提取用户名和uid和gid
sed -rn 's#(.*):.*:(.*):(.*):.*:.*:.*#\1,\2,\3#p' /etc/passwd
# 通过正则[]任意字符 成组() 多位数+ 进行组合 提取用户名和uid,gid
sed -rn 's#([0-9a-zA-Z]+):.*:([0-9]+):([0-9]+):.*#\1,\2,\3#p' /etc/passwd
8 通过[]与()结合扩展正则提取ip地址#
sed -nr 's#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}).*#\1.\2.\3.\4#p' ngin.log
浙公网安备 33010602011771号