导图社区 Sed命令速记
这是一篇关于Sed命令速记的思维导图,包含介绍与语法、选项、命令、元字符集等,希望对你有所帮助!
编辑于2023-11-23 12:09:46Sed命令速记
介绍与语法
描述:流编辑器-Stream editor,进行文本过滤与格式化替换输出; sed有两个内置的存储空间: 1).模式空间(pattern space)执行完命令后清空 2).保持空间(hold space) 默认不会被清空
命令格式:sed [options] -f scriptfile files #支持多文件 sed [选项] '[地址范围|模式范围] s#{被替换的字符串}#{替换后的字符串}#{替换标志}' [输入文件]
多表达式:sed '表达式' | sed '表达式' #等价于下面这一条sed语句 sed '表达式; 表达式'
选项[options]
-i :直接修改读取数据的文件的内容,而不由Screen(屏幕)输出.(直接在源文件里加入或者备份)
-r :支持扩展表达式,sed里面()就不需要使用\(),来进行转义
-f <script文件>或--file=<script文件>:#以选项中指定的script文件来处理输入的文本文件
-n或--quiet或--silent:#取消默认输出,仅显示script处理后的结果,并输出到Screen(屏幕)中;
-e <script>或--expression=<script>:#以选项中的指定的script来处理编辑输入的文本文件,可以执行多条sed命令
命令[command]
增操作
a 在当前行下一行追加插入文本 i 在当前行插入文本
删操作
d 删除选择的行 D 删除模板块的第一行
改操作
s 替换指定字符 。通常搭配正则表达式使用,其分隔符可以自定义 c 把选定的行改为新的文本
查操作
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p 打印模板块的行
文件保存读取
w file 写并追加模板块到file末尾 W file 写并追加模板块的第一行到file末尾
r file 从file中读行
行号与反向获取
= 打印当前行号码
! 表示后面的命令对所有没有被选定的行发生作用
替换标志
确定处理第几个字符处开始处理,1-512 数字标志
i 忽略大小写进行替换/匹配/查找
g 表示行内全面替换
p 表示打印行,常常与-n连用
大小写转换:\l \L \u \U 即 lower / upper
y :将匹配到字符串进行大写小写转换,不管有木有加g
e 执行命令标志,将模式空间的任何内容当作bash命令执行(需要注意空格)
正则匹配使用:\1 子串匹配标记 & 已匹配字符串标记
w 表示把行写入一个文件。 x 表示互换模板块中的文本和缓冲区中的文本。
元字符集
注意:sed无\d \w 代表 数字与字母的元字符,只有下面这几种元字符
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 \(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。 \> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。 x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。 x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
经典示例
删除命令d
sed -ri '3d' file //删除文件file中的第三行
sed -ri '/root/d' file //删除正则匹配到的包含root的行
sed -ri '/root/,5d' file //删除从正则匹配到的包含root的行开始,到第5行的内容
sed -ri '/root/,+5d' file //删除从正则匹配到的包含root的行开始,加5行的内容
sed -ri '/root/,!d' file //删除正则匹配到的包含root的行以外的其他行
替换命令s
sed -ri 's/root/alice/' passwd //将passwd文件中的第一个root替换为alice
sed -ri 's/root/alice/g' passwd //将passwd文件中的所有root替换为alice
读文件命令r
sed -r '/root/r /etc/hosts' passwd //在匹配到passwd文件中的root字符串之后,读入/etc/hosts文件
写文件命令w
追加命令
在指定行的后面附加一行a
sed -r '2a i love you' passwd //在passwd文件的第二行之后插入一行 i love you
在指定行的前面插入一行i
sed -r '2i i love you' passwd //在passwd文件的第二行之前插入一行 i love you
修改命令c
sed -r '3c\I like this!' passwd //将第三行替换成I like this!
sed -r '/daemon:/c\I like this!' passwd //找到正则匹配的行替换成I like this!
获取下一条命令n
取反选项!
补充知识
l (小写l)打印显示特殊字符(行尾以及tab标志)
特殊符号 {} 包含在{}中的命令按照顺序执行,并且前面命令会影响后面的命令
sed 脚本编写
每一行一条sed表达式