sed命令详解
sed命令详解 转载:http://blog.chinaunix.net/u/22677/showart_1076318.html
1.简介 sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。 sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把
当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
2.定址
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
地址是一个数字,则表示行号;是“$"符号,则表示最后一行。例如: sed -n '3p' datafile 只打印第三行
只显示指定行范围的文件内容,例如: # 只查看文件的第100行到第200行 sed -n '100,200p' mysql_slow_query.log
地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。例如:
sed '2,5d' datafile #删除第二到第五行 sed '/My/,/You/d' datafile #删除包含"My"的行到包含"You"的行之间的行 sed '/My/,10d' datafile #删除包含"My"的行到第十行的内容
3.命令与选项 sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。
3.1 sed命令 命令 功能 a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 d 删除行 h 把模式空间里的内容复制到暂存缓冲区 H 把模式空间里的内容追加到暂存缓冲区 g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 q 结束或退出sed r 从文件中读取输入行 ! 对所选行以外的所有行应用命令 s 用一个字符串替换另一个 g 在行内进行全局替换
w 将所选的行写入文件 x 交换暂存缓冲区与模式空间的内容 y 将字符替换为另一字符(不能对正则表达式使用y命令)
3.2 sed选项 选项 功能 -e 进行多项编辑,即对输入行应用多条sed命令时使用 -n 取消默认的输出 -f 指定sed脚本的文件名
4.退出状态 sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。 5.正则表达式元字符
与grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是,sed使用的正则表达式是括在斜杠线"/"之间的模式。 如果要把正则表达式分隔符"/"改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n '\o^Myop' datafile
元字符 功能 示例
^ 行首定位符 /^my/ 匹配所有以my开头的行
$ 行尾定位符 /my$/ 匹配所有以my结尾的行
. 匹配除换行符以外的单个字符 /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行
* 匹配零个或多个前导字符 /my*/ 匹配包含字母m,后跟零个或多个y字母的行 [] 匹配指定字符组内的任一字符 /[Mm]y/ 匹配包含My或my的行 [^] 匹配不在指定字符组内的任一字符 /[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行 \(..\) 保存已匹配的字符 1,20s/\(you\)self/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。
& 保存查找串以便在替换串中引用 s/my/**&**/ 符号&代表查找串。my将被替换为**my** \< 词首定位符 /\ \> 词尾定 /my\>/ 匹配包含以my结尾的单词的行 位符 x\{m\} 连续m个x /9\{5\}/ 匹配包含连续5个9的行
x\{m,\} 至少m个x /9\{5,\}/ 匹配包含至少连续5个9的行
x\{m,n\} 至少m个,但不超过n个x /9\{5,7\}/ 匹配包含连续5到7个9的行
6.范例
6.1 p命令 命令p用于显示模式空间的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认的打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容。
sed '/my/p' datafile #默认情况下,sed把所有输入行都打印在标准输出上。如果某行匹配模式my,p命令将把该行另外打印一遍。
sed -n '/my/p' datafile #选项-n取消sed默认的打印,p命令把匹配模式my的行打印一遍。
6.2 d命令 命令d用于删除输入行。sed先将输入行从文件复制到模式空间里,然后对该行执行sed命令,最后将模式空间里的内容显示在屏幕上。如果发出的是命令d,当前模式空间里的输入行会被删除,不被显示。
sed '$d' datafile #删除最后一行,其余的都被显示
sed '/my/d' datafile #删除包含my的行,其余的都被显示
6.3 s命令 sed 's/^My/You/g' datafile #命令末端的g表示在行内进行全局替换,也就是说如果某行出现多个My,所有的My都被替换为You。
sed -n '1,20s/My$/You/gp' datafile #取消默认输出,处理1到20行里匹配以My结尾的行,把行内所有的My替换为You,并打印到屏幕上。
sed 's#My#Your#g' datafile #紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。
6.4 e选项 -e是编辑命令,用于sed执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓冲区中的行上。
sed -e '1,10d' -e 's/My/Your/g' datafile #选项-e用于进行多重编辑。第一重编辑删除第1-3行。第二重编辑将出现的所有My替换为Your。因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。
6.5 r命令 r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上。 sed '/My/r introduce.txt' datafile #如果在文件datafile的某一行匹配到模式My,就在该行后读入文件introduce.txt的内容。如果出现My的行不止一行,则在出现My的各行后都读入introduce.txt文件的内容。
6.6 w命令
sed -n '/hrwang/w me.txt' datafile
6.7 a\ 命令 a\ 命令是追加命令,追加将添加新文本到文件中当前行(即读入模式缓冲区中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的内容超过一行,则每一行都必须以反斜线结束,最后一行除外。最后一行将以引号和文件名结束。
sed '/^hrwang/a\ >hrwang and mjfan are husband\ >and wife' datafile #如果在datafile文件中发现匹配以hrwang开头的行,则在该行下面追加hrwang and mjfan are husband and wife
6.8 i\ 命令 i\ 命令是在当前行的前面插入新的文本。
6.9 c\ 命令 sed使用该命令将已有文本修改成新的文本。 6.10 n命令 sed使用该命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何sed命令都将应用到匹配行紧接着的下一行上。
sed '/hrwang/{n;s/My/Your/;}' datafile 注:如果需要使用多条命令,或者需要在某个地址范围内嵌套地址,就必须用花括号将命令括起来,每行只写一条命令,或这用分号分割同一行中的多条命令。
6.11 y命令 该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。
sed '1,20y/hrwang12/HRWANG^$/' datafile #将1到20行内,所有的小写hrwang转换成大写,将1转换成^,将2转换成$。 #正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。
6.12 q命令 q命令将导致sed程序退出,不再进行其它的处理。
sed '/hrwang/{s/hrwang/HRWANG/;q;}' datafile
6.13 h命令和g命令 #cat datafile My name is hrwang. Your name is mjfan. hrwang is mjfan's husband. mjfan is hrwang's wife.
sed -e '/hrwang/h' -e '$G' datafile sed -e '/hrwang/H' -e '$G' datafile #通过上面两条命令,你会发现h会把原来暂存缓冲区的内容清除,只保存最近一次执行h时保存进去的模式空间的内容。而H命令则把每次匹配hrwnag的行都追加保存在暂存缓冲区。 sed -e '/hrwang/H' -e '$g' datafile sed -e '/hrwang/H' -e '$G' datafile #通过上面两条命令,你会发现g把暂存缓冲区中的内容替换掉了模式空间中当前行的内容,此处即替换了最后一行。而G命令则把暂存缓冲区的内容追加到了模式空间的当前行后。此处即追加到了末尾。
linuxSed命令详解
linux sed命令详解1. Sed简介sed 是一种在线编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
以下介绍的是Gnu版本的Sed 3.02。
2. 定址可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。
如1,3表示1,2,3行,美元符号($)表示最后一行。
范围可以通过数据,正则表达式或者二者结合的方式确定。
3. Sed命令1)调用sed命令有两种形式:2)sed [options] 'command' file(s)3)sed [options] -f scriptfile file(s)4)a\ 在当前行后面加入一行文本。
5)b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
6)c\ 用新的文本改变本行的文本。
7)d 从模板块(Pattern space)位置删除行。
8)D 删除模板块的第一行。
9)i\ 在当前行上面插入文本。
10)h 拷贝模板块的内容到内存中的缓冲区。
11)H 追加模板块的内容到内存中的缓冲区12)g 获得内存缓冲区的内容,并替代当前模板块中的文本。
13)G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
14)l 列表不能打印字符的清单。
15)n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
16)N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
17)p 打印模板块的行。
18)P(大写)打印模板块的第一行。
sed命令
1. Sed 简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中, 称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲 区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除 非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编 写转换程序等。以下介绍的是 Gnu 版本的 Sed 3.02。 2. 定址 可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两 行为起止的行的范围(包括行数表示的那两行)。如 1,3 表示 1,2,3 行,美元符号($)表示最 后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。
124. * 125. $ sed 's/test/mytest/g' example-----在整行范围内把 test 替换为 mytest。 如果没有 g 标记, 则只有 每行第一个匹配的 test 被替换成 mytest。 126. * 127. $ sed -n 's/^test/mytest/p' example-----(-n)选项和 p 标志一起使用表示只打印那些发生替换的行。 也就是说,如果某一行开头的 test 被替换成 mytest,就打印它。 128. * 129. $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以 192.168.0.1 开头的行都会被替换成它自已加 localhost,变成 192.168.0.1localhost。 130. * 131. $ sed -n 's/\(love\)able/\1rs/p' example-----love 被标记为 1,所有 loveable 会被替换成 lovers,而 且替换的行会被打印出来。 132. * 133. $ sed 's#10#100#g' example-----不论什么字符,紧跟着 s 命令的都被认为是新的分隔符,所以, “#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有 10 替换成 100。 134. 选定行的范围:逗号 135. * 136. $ sed -n '/test/,/check/p' example-----所有在模板 test 和 check 所确定的范围内的行都被打印。 137. * 138. $ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以 test 开始的行之间的所有行。 139. * 140. $ sed '/test/,/check/s/$/sed test/' example-----对于模板 test 和 west 之间的行, 每行的末尾用字符 串 sed test 替换。 141. 多点编辑:e 命令 142. * 143. $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示, 第一条命令删除 1 至 5 行,第二条命令用 check 替换 test。命令的执 行顺序对结果有影响。如果 两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。 144. * 145. $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e 更好的命令是--ex pression。它能给 sed 表达式赋值。 146. 从文件读入:r 命令 147. * 148. $ sed '/test/r file' example-----file 里的内容被读进来, 显示在与 test 匹配的行后面, 如果匹配多行, 则 file 的内容将显示在所有匹配行的下面。 149. 写入文件:w 命令 150. * 151. $ sed -n '/test/w file' example-----在 example 中所有包含 test 的行都被写入 file 里。 152. 追加命令:a 命令 153. * 154. $ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以 test 开头的行后 面,sed 要求命令 a 后面有一个反斜杠。 155. 插入:i 命令 156. $ sed '/test/i\\
sed命令的用法
sed(Stream Editor)是一个强大的文本处理工具,它可以用于对文本进行替换、删除、插入、打印等操作。
下面是sed命令的一些常见用法:1. 替换文本:```sed 's/要替换的内容/替换后的内容/g' 文件名```例如,将文件中所有的"apple"替换为"orange":```sed 's/apple/orange/g' file.txt```2. 删除行:```sed '行号d' 文件名```例如,删除文件中的第3行:```sed '3d' file.txt```3. 插入内容:```sed '行号i\要插入的内容' 文件名```例如,在文件的第5行前插入一行"Hello World":```sed '5i\Hello World' file.txt```4. 打印特定行:```sed -n '行号p' 文件名```例如,打印文件中的第2行和第4行:```sed -n '2p;4p' file.txt```5. 正则匹配:```sed '/匹配模式/操作' 文件名```例如,删除包含"test"的行:```sed '/test/d' file.txt```这只是sed命令的一些基本用法示例,它还有更多高级功能和选项。
你可以通过查看sed的文档或使用`man sed`命令来获取更详细的信息和用法示例。
sed命令详解
Linux中的sed命令注意:在使用sed时,它的AddressCommand这一段需要使用单引号引起来,然后,如果地址包含了模式,则使用//把模式框住。
在使用s做替换时,因为已经使用了///,则不需要再增加//。
s/OLD/NEW/s@@@s###注意:只有OLD那里可以使用正则表达式,NEW那里可以调用分组,以及使用字符串,但不能使用正则表达式。
grep, sed(流编辑器), awk注意grep中匹配的模式不要加//,而在sed中使用模式的话要加//才是正确的格式grep: 对匹配模式的内容显示到屏幕,默认显示匹配模式的行sed: 对匹配模式的内容进行操作,默认显示所有的行sed基本用法:sed: Stream EDitor 行编辑器(vi :全屏编辑器)sed: 模式空间默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;sed [options] 'AddressCommand' file ...-n: 静默模式,不再默认显示模式空间中的内容-i: 直接修改原文件-e SCRIPT -e SCRIPT:可以同时执行多个脚本-f /PATH/TO/SED_SCRIPTsed -f /path/to/scripts file-r: 表示使用扩展正则表达式Address:1、StartLine,EndLine比如1,100$:最后一行2、/RegExp//^root/3、/pattern1/,/pattern2/第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行4、LineNumber指定的行5、StartLine, +N从startLine开始,向后的N行;Command:d: 删除符合条件的行;例:删除/etc/fstab中以#开头的行,即此文件中以#开头的行不再显示在屏幕上,而文件本身不做修改[root@Centostmp]# sed '/^#/d' fstabp: 显示符合条件的行;例:显示fstab文件中,包含了fs做为词尾,并且后面有空白字符的行,并且只显示符合条件的行,使用静默模式[root@Centostmp]# sed -n '/fs\>[[:space:]]/p' fstabtmpfs /dev/shmtmpfs defaults 0 0sysfs /syssysfs defaults 0 0a \string: 在指定的行后面追加新行,内容为string\n:可以用于换行例:在fstab文件的第一行后面添加一行,添加的内容为我是刘庆hahahahahahahhaha[root@Centostmp]# sed '1a\我是刘庆hahahahaha' fstabi \string: 在指定的行前面添加新行,内容为string例:在fstab文件的第一行后面添加一行,添加的内容为我是刘庆hahahahahahahhaha[root@Centostmp]# sed '1i\我是刘庆hahahahah' fstabr FILE: 将指定的文件的内容添加至符合条件的行处例:在fstab文件的第一行后面将/etc/passwd的内容添加[root@Centostmp]# sed '1r /etc/passwd' fstabw FILE: 将地址指定的范围内的行另存至指定的文件中;例:将fstab中以#开头的行保存到a.txt[root@Centostmp]# sed '/^#/w a.txt' fstabs/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串加修饰符g: 全局替换i: 忽略字符大小写s///: s###, s@@@\(\), \1, \2例:查找fstab文件中,包含了fs为词尾的行,将其替换成成FS[root@Centostmp]# sed 's/fs\>/FS/g' fstab此命令中g表示全局的意思,即加g这个修饰符以后,对整个行内符合条件的字符串进行替换,如果不加g只替换每行第一个字符串l..e: like-->likerlove-->loverlike-->Likelove-->Love&: 引用模式匹配整个串例:将文件test中字符 like 换成liker love 换成lover[root@Centostmp]# sed 's/\(l..e\)/\1r/' testI liker computer!shelover me![root@Centostmp]# sed 's/l..e/&r/' testI liker computer!注意:使用\(\)再后向引用时可灵活变通,但&只能匹配整个条件,而不是条件的一部分,比如,将like lover的l换成大写的Lsed的命令a : 新增,a\string a的后面可以接字符串,而这些字符串会在新的一行出现,即目前行的下一行c : 替换,c\string c后面可以接字符串,这些字符串可以替换n1,n2之间的行d : 删除,因为是删除,所以d后面通常不接任何参数i : 插入,i后面可以接字符串,这些字符出现在当前行的上一行p : 打印,也就是将某个选择的数据打印出来,一般与选项 -n一起使用,-n是静默显示,即只在屏幕上显示符合条件的行s : 替换,可以直接进行替换工作。
sed -e用法
sed -e用法`sed`命令是一种流编辑器,用于处理文本文件。
其主要功能是根据给定的规则去处理文本文件中的内容,并且不改变原有文件的内容。
`-e`是`sed`命令的一个选项,用于指定要执行的编辑命令。
使用`-e`选项时,可以在单个命令行中指定多个`sed`的编辑命令,通过分号`;`分隔。
例如:```sed -e 's/pattern/replacement/' -e 's/regex/replacement/' filename```上面的命令将根据给定的模式进行替换操作,两个`-e`选项指定了不同的替换命令。
`s/`表示替换,`pattern`是要匹配的模式,`replacement`是替换成的内容。
`regex`是正则表达式,用于匹配复杂的模式。
可以在`-e`选项后面添加多个编辑命令,每个命令都会按照指定的顺序依次执行。
此外,还可以使用`-e`选项的缩写形式`-E`,它用于支持扩展正则表达式。
扩展正则表达式比普通的正则表达式更强大,支持更多的模式匹配规则。
`sed -e`命令不仅在命令行中使用,也可以将它作为输入传递给`sed`,比如通过管道操作。
例如:```cat filename | sed -e 's/pattern/replacement/'```上面的命令将读取`filename`的内容,将其中匹配到的`pattern`替换为`replacement`,然后输出结果。
总结起来,`sed -e`的用法就是通过`-e`选项指定多个编辑命令,然后根据这些命令对输入的文本进行处理,并将结果输出。
可以使用不同的命令和正则表达式来实现各种文本处理操作。
linuxsedawk命令详解
linuxsedawk命令详解Sed⽤法sed是⼀个很好地⽂件处理⼯具,本⾝是⼀个管道命令,主要是以⾏为单位进⾏处理,可以将数据进项替换,删除,新增,选取等特定⼯作,下⾯先了解⼀下sed的⽤法。
sed的命令⾏格式为:sed [-nefri] 'command' 输⼊⽂本 常⽤选项:常⽤选项:-n∶使⽤安静(silent)模式。
在⼀般 sed 的⽤法中,所有来⾃ STDIN的资料⼀般都会被列出到萤幕上。
但如果加上 -n 参数后,则只有经过sed 特殊处理的那⼀⾏(或者动作)才会被列出来。
-e∶直接在指令列模式上进⾏ sed 的动作编辑;-f∶直接将 sed 的动作写在⼀个档案内, -f filename 则可以执⾏ filename 内的sed 动作;-r∶sed 的动作⽀援的是延伸型正规表⽰法的语法。
(预设是基础正规表⽰法语法)-i∶直接修改读取的档案内容,⽽不是由萤幕输出。
常⽤命令:a ∶新增, a 的后⾯可以接字串,⽽这些字串会在新的⼀⾏出现(⽬前的下⼀⾏)~c ∶取代, c 的后⾯可以接字串,这些字串可以取代 n1,n2 之间的⾏!d ∶删除,因为是删除啊,所以 d 后⾯通常不接任何咚咚;i ∶插⼊, i 的后⾯可以接字串,⽽这些字串会在新的⼀⾏出现(⽬前的上⼀⾏);p ∶列印,亦即将某个选择的资料印出。
通常 p 会与参数 sed -n ⼀起运作~s ∶取代,可以直接进⾏取代的⼯作哩!通常这个 s 的动作可以搭配正则表⽰法!例如 1,20s/old/new/g 就是啦!awk⽤法awk '{pattern +action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中pattern表⽰AWK在数据中查找的内容,⽽action是在找到匹配内容是所执⾏的⼀系列命令。
花括号({})不需要再成勋中始终出现,但他们⽤于根据特定的模式对⼀系列指令进⾏分组。
linux命令总结sed命令详解
linux命令总结sed命令详解Sed 简介sed 是⼀种新型的,⾮交互式的编辑器。
它能执⾏与编辑器 vi 和 ex 相同的编辑任务。
sed 编辑器没有提供交互式使⽤⽅式,使⽤者只能在命令⾏输⼊编辑命令、指定⽂件名,然后在屏幕上查看输出。
sed 编辑器没有破坏性,它不会修改⽂件,除⾮使⽤ shell 重定向来保存输出结果。
默认情况下,所有的输出⾏都被打印到屏幕上。
sed ⼯作过程sed 编辑器逐⾏处理⽂件(或输⼊),并将输出结果发送到屏幕。
sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。
sed 把当前正在处理的⾏保存在⼀个临时缓存区中,这个缓存区称为模式空间或临时缓冲。
sed 处理完模式空间中的⾏后(即在该⾏上执⾏ sed 命令后),就把改⾏发送到屏幕上(除⾮之前有命令删除这⼀⾏或取消打印操作)。
sed 每处理完输⼊⽂件的最后⼀⾏后, sed 便结束运⾏。
sed 把每⼀⾏都存在临时缓存区中,对这个副本进⾏编辑,所以不会修改或破坏源⽂件。
如图 1: sed 处理过程。
从上图可以看出 sed 不是破坏性的,它不会修改正在编辑的⽂件。
Sed 命令格式sed 命令⾏格式为: sed [选项] ‘ command’ 输⼊⽂本Sed 定位Sed 命令在没有给定的位置时,默认会处理所有⾏;Sed ⽀持⼀下⼏种地址类型:1、 first~step这两个单词的意思: first 指起始匹配⾏, step 指步长,例如: sed -n 2~5p 含义:从第⼆⾏开始匹配,隔 5 ⾏匹配⼀次,即 2,7,12.......。
2、 $这个$符表⽰匹配最后⼀⾏。
3、 /REGEXP/这个是表⽰匹配正则那⼀⾏,通过//之间的正则来匹配。
4、 \cREGEXPc这个是表⽰匹配正则那⼀⾏,通过\c 和 c 之间的正则来匹配,c 可以是任⼀字符5、 addr1, add2定址 addr1, add2 决定⽤于对哪些⾏进⾏编辑。
Linuxshellsed命令详解
Linuxshellsed命令详解详细的sed命令详解,请参考sed命令常见⽤途1. 查找关键词做全局替换2. 查找某⾏的关键词做替换3. 查找关键字所在⾏,并且执⾏指定关键字的替换4. 在某⾏之后追加5. 查找关键字,并且在第⼆⾏追加6. 删除包含关键字的⾏7. 查看指定的⾏8. 在最后⼀⾏追加9. sed -e 参数,屏幕输出,⼀次更改多替换⽂本中多个值1. 查找关键词做全局替换sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config2. 查找/etc/crontab 第17⾏,并且把0,30替换为15,45sed -i '17s/0,30/15,45/' /etc/crontab3. 查找/etc/crontab 中的关键字script.sh,并且把15,45替换为0,30sed -i '/script.sh/s/15,45/0,30/' /etc/crontab4. 在第17⾏后添加新的⼀⾏内容sed -i '17a\0 * * * * root /root/test.sh' /etc/crontab5. 在/etc/crontab中查找关键字script,并且该关键字的下⼀⾏追加⼀⾏新内容sed -i '/^.*script.*$/a\30,45 * * * * root /root/check.sh' /etc/crontab6. 在/etc/crontab中查找关键字check.sh,并且把这⾏的内容替换掉sed -i '/^.*script.*$/c\30,45 * * * * root /root/check.sh' /etc/crontab7. 在/etc/crontab中查找关键字check.sh,并且删除该⾏sed -i '/check.sh/d' /etc/crontab8. 显⽰第17到18⾏之间的内容sed -n '17,18p' /etc/crontab9. 在最后⼀⾏追加⼀⾏0 * * * * root /root/check.shsed -i '$a\0 * * * * root /root/check.sh' /etc/crontab10. sed 命令处理换⾏符,例如替换或者删除sed ':label;N;s/\n/:/;b label' filenamesed ':label;N;s/\n/:/;t label' filename上⾯的两条命令可以实现将⽂件中的所有换⾏符替换为指定的字串,如命令中的冒号。
02.linux命令之批量替换文件内容sed
02.linux命令之批量替换⽂件内容sed1.sed详解⽤来⾃动编辑⼀个或多个⽂件;简化对⽂件的反复操作;编写转换程序等这⾥主要是批量的替换⽂件内容1)命令格式:sed [可选参数] {script-only-if-no-other-script} [⽂件]2).主要的参数有⼀下内容:Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...-n, --quiet, --silentsuppress automatic printing of pattern space-e script, --expression=scriptadd the script to the commands to be executed-f script-file, --file=script-fileadd the contents of script-file to the commands to be executed--follow-symlinksfollow symlinks when processing in place-i[SUFFIX], --in-place[=SUFFIX]edit files in place (makes backup if SUFFIX supplied)-c, --copyuse copy instead of rename when shuffling files in -i mode-b, --binarydoes nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (open files in binary mode (CR+LFs are not treated specially))-l N, --line-length=Nspecify the desired line-wrap length for the `l' command--posixdisable all GNU extensions.-r, --regexp-extendeduse extended regular expressions in the script.-s, --separateconsider files as separate rather than as a single continuouslong stream.-u, --unbufferedload minimal amounts of data from the input files and flushthe output buffers more often-z, --null-dataseparate lines by NUL characters--helpdisplay this help and exit--versionoutput version information and exit 参数解析:-e<script>或--expression=<script> 以选项中指定的script来处理输⼊的⽂本⽂件。
sed命令 -i的用法
sed命令 -i的用法sed(Stream Editor)是一个在文本流中执行编辑操作的强大工具,它可以自动编辑文本文件中的文本(称为流,数据只读入内存的一部分),其优点是可以将处理结果输出到标准输出,也可以将处理结果保存到文件中,常常被用来进行批量文本处理的工作。
在实际应用中经常会使用到sed命令,并且其中的-i参数非常常见,本篇文章将对-sed命令-i参数的用法进行详细的介绍。
在了解-sed命令 -i参数之前,我们先简单介绍一下sed命令的基本用法。
参数说明:- -e 在 sed 脚本中加入要执行的命令- -f 在 sed 脚本中加入要执行的命令- -n不产生命令输出示例:1.将文件中的boy替换为girl$ sed 's/boy/girl/' file.txt2.将文件file1.txt中匹配regular expression的行替换为replace line3.将文件file2.txt中匹配的行和下一行合并为一行-sed命令 -i参数表示直接修改内容,一般用于在文本文件中进行查找和替换操作。
需要注意的是,使用-i参数会直接修改原文件,如果需要备份原文件,可以在-i参数后跟上备份文件后缀名,例如:-i 参数实际上就是在-sed命令中加入-w参数的快捷方式,使用-i参数会将结果覆盖到输入文件中,而不是输出结果到标准输出。
如果你只是想测试运行一下但又不想对原文件进行操作的话,可以将-i参数替换成-n参数,示例如下:该命令不会改变原文件,只是在标准输出中输出替换结果,并且为了防止正则表达式过于复杂导致替换错误,建议在进行大规模替换操作前进行备份。
3.将匹配为“string”字符串的行加上行尾的“Addition”字符串并备份原文件总结本篇文章主要介绍了-sed命令中-i参数的用法,希望可以对读者在文本操作时提供帮助,同时也希望大家能够根据实际需求合理运用-sed 命令和-i参数进行批量文本处理。
