文本三剑客之sed
一、文本三剑客之sed
1、基本用法
sed [选项]... '{自身脚本语法};....' [input file...]
举例:
seq 5 |sed #生成1-5数字传给sed
#该格式报错,基本格式中的'{自身脚本语法}'不可以不写,可以写空则是默认打印全部内容如下
seq 5 | sed ''
1
2
3
4
5
sed工作原理
2、sed脚本语法及命令
语法结构
sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数
常见的选项
-e 或 --expression | 表示用指定命令或者脚本来处理输入的文本文件。 |
-f 或 --file | 表示用指定的脚本文件来处理输入的文本文件。 |
-h 或 --help | 显示帮助。 |
-n、--quiet 或 silent | 表示仅显示处理后的结果。 |
-i.bak | 直接编辑文本文件。 |
-r,-E | 使用扩展正则表达式。 |
-s | 将多个文件视为独立文件,而不是单个连续的长文件流。 |
3、sed的查找替换使用
格式:sed '/可使用正则表达式选择范围/'s/查找内容/替换内容/g g表示全文,固定格式的///可以用###等符号替换
注意:查找内容可使用正则表达式,替换内容不可使用正则表达
p 将内容打印到屏幕,使用时关闭自动打印功能,-n选项
q 到指定的内容即退出,例如打印到第三行直接退出
d 删除指定内容
a 在指定位置添加内容
c 替换指定内容
4、后向引用
( )内的按顺序标为123 ,引用时\1调用第一个()的内容,\n表示调用第n个()的内容。
.*表示任意长度字符不管是什么字符
举例1:取ip地址
ifconfig ens33 |sed -nr 's/.*inet (.*) netmask.*/\1/p'
#查看ens33的网卡信息传给sed处理,-n选项关闭自动打印,-r选项开启扩展正则表达式
's///'查找替换标准格式,.*inet 表示以inet为止的前面所有字符 (.*) 括号表示使用反向引用
.*表示该处的任意字符 netmask.*表示以netmask开头后面的所有字符。\1表示反向引用第一个()的
内容,p表示打印出来
192.168.30.11 #打印结果
举例2:
echo abc123XYZ | sed -nr 's/(abc)(123)(XYZ)/\3\2\1/p'
#打印abc123XYZ传给sed处理变成XYZ123ABC,-n选项关闭自动打印,-r选项开启扩展正则表达式
's///'查找替换标准格式。三个()括起来的内容分别表示元素123,调用时改变调用顺序打印即可改变内容顺序
XYZ123abc #打印结果
5、变量
使用sed查询是可以直接调用变量,注意必须用“ ”号或者俩个双引号,单引号不识别变量。