Sed简介 缺乏、安全感 2022-08-10 09:23 115阅读 0赞 Sed简介 sed是一款轻量级流编辑器,是stream editor的简写。由于sed是以行为单位进行编辑文件 , 因此也称为行编辑器。它无需直接编辑资料,能够将编辑工作自动化。 sed工作方式: 由标准输入读取编辑文件,读入一行或指定行放到模式空间,然后将所有编辑指令逐一对模式空间的内容进行编辑,之后将结果输出到标准输出,同时清除模式空间。接下来再将下一行资料读入模式空间,如此重复之前的操作,直到最后一行,流编辑器停止。源文件不变 Ps: 1、模式空间为读入行所在的缓存,sed对文本行进行的处理都是在这里进行的 2、一次操作一行, 按顺序逐行应用命令 3、sed命令执行与返回数据几乎同时进行的,在处理每一行数据的将同时就显示结果 4、文件内容存在模式空间,并没有改变,除非使用重定向存储输出,因而不会修改原文件 语法: 由编辑指令与文件组成 1、\# sed \[sed选项\] ‘sed命令’ 要修改的文件 > 新文件 2、\# sed \[sed选项\] -f sed脚本 要修改的文件 3、\# sed脚本 \[sed选项\] 要修改的文件 参数(sed选项): \-e command:–expression=command:进行多项编辑,表示将后续的字符串解析为sed编辑命令,对输入行应用多条sed命令时使用。 \# sed -e ‘1,5d’ -e ‘s/boy/girl/’ dodo \# sed –expression=’1,5d’ –expression=’s/boy/girl/’ dodo \-e script-file:–expression=script-file:调用指定的sed脚本文件来处理输入的文本文件 \-f script-file:–filer=script-file:调用指定的sed脚本文件来处理输入的文本文件 \-h:–help:打印帮助 \-i:直接修改读取的源文件(默认不修改源文件) 也可以先备份源文件然后再修改,格式如下: \# sed -i.bak ‘1d’ filename \-n:–quiet, –silent:取消默认的输出,仅打印匹配模式的行(默认输出所有内容) \-r:sed的动作支持延伸型正规表示法的语法。(默认为基础正规表示法语法) \-V:–version:显示版本信息 sed命令 a\ : 在定位行号后面加入一行或多行文本。(加入多行时除最后一行每行末尾需用"\"续行) b lable: 将执行的指令跳至由":"建立的参考位置,如果不存在参考位置则跳转到脚本的末尾 c\: 用新的文本替换定位行的文本。 d: 删除定位行 D: 删除模式空间内的第一行 g: 把当前保持缓冲区中的内容复制到模式空间,替换掉了模式空间中当前行的内容 G: 把当前保持缓冲区中的内容追加到模式空间,追加到了模式空间的当前行后 h: 把模式空间的内容复制到当前保持缓冲区中,把原来暂存缓冲区的内容清除,添加新内容 H: 把模式空间的内容复制到当前保持缓冲区中,追加在保持缓冲区中原有内容的后面 i\: 在定位行号前面插入一行或多行文本。 l: 以可见的严格的形式列出当前模式空间中的内容 n: 读取下一个输入行,用下一个命令处理新的行 N: 追加下一个输入行到模式空间。 p: 打印匹配行 P: 打印模式空间的第一行 q: 第一个模式匹配完成后就退出Sed r file: 从文件中读取输入行 s: 用一个字符串替换另一个字串。(默认为替换每一行中的第一个) t label: 如果s指令发生替换操作成功,则跳到":"标记的地方,即使已经读入输入的最后一行,如果没有没有标记则到脚本末尾 T label: 如果s指令发生替换操作失败,则跳到":"标记的地方,即使已经读入输入的最后一行,如果没有没有标记则到脚本末尾 w: 将当前模式空间中的全部内容写入到文件中 W: 将当前模式空间中的第一行写入到文件中 x: 交换模式空间和文本的内容 y: 转换字元,把一个字符翻译为另外的字符(但是不用于正则表达式) : label: 建立参考位置 {} : 有相同位址参数的指令组 #: 把注释扩展到下一个换行符之前 =: 显示文件行号 !: 不执行选中行的命令,只对所选行以外的行应用命令 元字符集 sed支持特殊元字符,来进行模式查找、替换 ^: 行首定位符。如:/^doiido/匹配所有以doiido开头的行 $: 行尾定位符。如:/doiido$/匹配所有以doiido结尾的行 ^$: 表示空白行 .: 匹配换行符以外的字符。如:/d...do/ 匹配d后面接3个任意字符,然后do。 *: 匹配零个或多个前导字符。如:/doiido*/ 匹配所有以doiid开头,后面跟零个或多个o的行 []: 匹配指定字符组内的任一字符。如:/[Dd]oiido/ 匹配所有包含doiido或Doiido的行 [^]: 匹配不在指定字符组内的任一字符。如:/[^Dd]oiido/ 匹配所有不是以D或者d开头的但是以oiido结尾的行 \(..\): 保存已匹配的字符。如:s/\(hello\)doiido/\1baby 这里把hello保存为标签1,如果发现hellodoiido则替换成helloboy,最多可以定义9个标签 &: 保存查找字符串用来替换其他字符串。如:s/doiido/--&--/,符号&代表查找字符串,doiido将变成--doiido-- \<: 词首定位符。如:/\<doiido/ 匹配所有包含有以doiido开头的单词的行。 \>: 词尾定位符。如:/doiido\>/ 匹配所有包含有以doiido结尾的单词的行。 x\{ m\}: 连续m个x。如:/2\{ 8\}/ 匹配所有包含连续8个2的行。 x\{ m,\}: 至少m个x。如:/2\{ 8,\}/ 匹配所有包含至少连续8个2的行。 x\{ m,n\}: 至少m个x,但不多于n个。如:/2\{ 6,8\}/ 匹配所有包含连续6个到8个2的行。 Ps:匹配元字符$前,必须使用反斜线\\屏蔽其特殊含义。比如/\\$/ 字符类扩展: []: 可以和"-"配合使用 [a-z]: 匹配所有的小写字母 [0-9]: 匹配所有的数字 [:space:]: 匹配空格 [:alnum:]: 匹配字母数字 [a-z A-Z 0-9] [:alpha:]: 匹配字母 [a-z A-Z] [:blank:]: 匹配 空格或制表键 [:cntrl:]: 匹配 任何控制字符 [:digit:]: 匹配数字 [0-9] [:graph:]: 匹配任何可视字符(无空格) [:lower:]: 匹配小写 [a-z] [:print:]: 匹配非控制字符 [:punct:]: 匹配标点字符 [:space:]: 匹配空格 [:upper:]: 匹配大写 [A-Z] [:xdigit:]: 匹配十六进制数字 [0-9 a-f A-F] 字符类例子: ^[0-9]: 表示行第一个字符为任意数字 ^[0-9]*: 表示行首包含任意个数的数字 [0-9][0-9]*$: 表示行尾包含至少2个数字 s/\.$//g : 删除以句点结尾的行的句点 s/^[ ][ ]*//: 删除行首的任意个空格 s/^.//: 删除行首的第一个字符 s/^\///: 删除行首的“/”字符 s/SP\(..\)//g: 删除字符“SP”以及紧跟其后的两个任意字符,“SPLLY”-->“Y” ^#/: 以 '#' 开始的任何行匹配 /}^/ : 将与以 '}'(无空格)结束的任何行匹配 /} *^/ : 将与以 '}' 后面跟有 零或多个空格结束的任何行匹配 /[abc]/ : 将与包含小写 'a'、'b' 或 'c' 的任何行匹配 /^[abc]/ : 将与以 'a'、'b' 或 'c' 开始的任何行匹配 位置参数: 在默认情况下,在sed编辑器中使用的命令应用于所有文本数据行。 如果仅想将某个命令应用于某一特定的数据行或一组文本数据行,则必须使用行寻址。 行寻址通过定址来定位你所希望编辑的行,是由数据,正则表达式或者二者结合的方式确定。行寻址的格式有如下几种: x x为指定行号 $ 最后一行 x,y 指定从x到y的行号范围 /pattern/ 查询包含模式的行 /pattern/pattern/ 查询包含两个模式的行 /pattern/,x 从与pattern的匹配行到x号行之间的行 x,/pattern/ 从x号行到与pattern的匹配行之间的行 x,y! 不包括x和y行号的行 位址参数的个数 : 当只有1个位址参数时,表示只有符合位置参数的资料行才编辑 当有2个位址参数时,如x,y时,表示对x到y的行号范围资料区执行编辑。(包括x和y) 引号语法 1、单引号下,不会对$和后引号`进行解释和执行,即把这两个月当成普通字符 2、双引号下,美元符会被展开为变量或参数的值,后引号中的命令被执行并以输出的结果代替后引号中的内容。 因此平时要使用单引号'',使用变量时使用双引号"" 使用变量时:# sed "/$hello/d" dodo sed退出状态: 1、不管是否找到指定的模式,退出状态都是0。 2、当命令存在语法错误时,sed的退出状态不是0。 转义: 如果需要使用到斜杠"/",就需要先对其转移,转义一般有以下两种 1:[/] 2:\/ 单行使用多条语句 1、在命令之间使用分号 # sed -n '=;p' dodo 2、使用大括号 # sed -n '3{ > = > p}' dodo 3、使用-e参数 # sed -n -e '=' -e 'p' dodo 4、使用脚本文件,然后使用-f引用 # sed -f scirpt dodo 5、bash shell中可以使用次提示符'' # sed -i ' >s/boy/girl/ >s/hello/byebye/' data 其他sed使用注意: 1、如果不使用地址,命令将应用到所有行 2、默认情况只会替换各行中首次出现的文本,如果一行中有多个需要替换,则需要替换标记 3、如果要定位一特殊字符,则必须使用”\\”或者”\[\]”屏蔽其特殊含义 ========================脚本========================== 脚本:Sed脚本就是写在文件中的一列sed命令,启动Sed时以-f选项引导脚本文件名。 脚本工作方式: 执行脚本时,sed先将输入文件中第一行复制到模式空间,然后对其执行脚本中所有的命令。一行处理完毕后,sed再复制文件中下一行到模式空间,对其执行脚本中所有命令。直到最后一行。 脚本注意项: 1、脚本中,在命令的末尾不能有任何空白或文本 2、如果在一行中有多个命令,要用分号分隔。 3、以\#开头的行为注释行,且不能跨行。 脚本格式: #!/bin/sed -f command1 command2 脚本实例: # cat test.sed #!/bin/sed -f /hello/a\ hi boy doiido 2i\ you are great 添加权限并执行 # chmod u+x test.sed # ./test.sed dodo
相关 sed命令简介 sed处理时,有2个缓冲区:【pattern space】和【hold space】 sed执行过程: 先读入一行,去掉尾部换行符,存入【pattern space】, Love The Way You Lie/ 2022年12月29日 15:28/ 0 赞/ 95 阅读
相关 sed \[root@localhost ~\]\ cat 3 difsdf fsd dfs \[root@localhost ~\]\ sed 's/fs/aa/' 川长思鸟来/ 2022年10月02日 10:48/ 0 赞/ 105 阅读
相关 sed和awk简介 什么是sed和awk sed和awk是Linux环境下数据的处理工具,可以完成对数据的增删改查的功能。 sed处理时是以行尾单 深藏阁楼爱情的钟/ 2022年08月11日 00:53/ 0 赞/ 191 阅读
相关 Sed简介 Sed简介 sed是一款轻量级流编辑器,是stream editor的简写。由于sed是以行为单位进行编辑文件 , 因此也称为行编辑器。它无需直接编辑资料,能够将编辑工作自 缺乏、安全感/ 2022年08月10日 09:23/ 0 赞/ 116 阅读
相关 sed 目录 简介 1 调用方式 2 选项 2 命令集合 2 寻址 3 基本用法 4 文件读入写出 5 附加-插入-修改文本 5 删除文本 6 ゞ 浴缸里的玫瑰/ 2022年08月06日 15:29/ 0 赞/ 114 阅读
相关 sed sed sed与grep比较,sed能实现grep功能,但是比较麻烦,而且没有颜色显示;sed优势在于替换一些指定的字符。 用sed实现grep匹配的功能,匹配关键词用 ╰半橙微兮°/ 2022年05月26日 06:51/ 0 赞/ 101 阅读
相关 sed stream editor 文件或命令行获取一行文本,进行处理输出,不修改原始文本 从命令行读取是输入一行,处理一行,再输入一行(这就是第二行),结束Ctrl+D(发送 r囧r小猫/ 2022年04月24日 13:30/ 0 赞/ 138 阅读
相关 Linux grep awk sed 用法简介 grep grep [options] regex [file...] regex 是指一个正则表达式 \-i : 忽略大小写。不会区分大小写字符 水深无声/ 2022年02月03日 10:23/ 0 赞/ 285 阅读
相关 Sed命令 脚本命令如果不经常使用,那么很容易忘记,所以这里记录下,经常使用到的一些脚本命令。忘记的时候,看下笔记也能够快速捡起来 1.Sed命令语法 sed \[options\ 小咪咪/ 2021年11月09日 12:36/ 0 赞/ 446 阅读
相关 sed 命令 sed 是一种在线编辑器,主要用来自动编辑一个或多个文件。 工作原理:sed一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern spa 青旅半醒/ 2021年06月22日 15:37/ 0 赞/ 416 阅读
还没有评论,来说两句吧...