- sed是一种流编编器,linux中,主要中sed命令实现对文件的增删改替换查
- sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:
- 每次仅读取一行内容;
- 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
- 将执行结果输出。
- 当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。
- 格式 sed [选项] [脚本命令] 文件名
- 常见选项
- -n : 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
- -i : 此选项会直接修改源文件。
- -e <script>: 以选项中指定的script来处理输入的文本文件
- -f<script文件>: 以选项中指定的script文件来处理输入的文本文件。
- -r : 在脚本中使用扩展表达式
- -h : 显示帮助
- 脚本说明
- a : 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i : 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 sed –e ‘20s/old/new/g’ file 前面的20是行号,不加的话是对整个文件
- sed s 替换脚本命令
- 格式 sed –e [address]s/pattern/replacement/flags flle
- address 指定要操作的行,pattern 指的是需要替换的内容,replacement 指代的是要替换的新内容
- flags的标记如下:
- n :1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
- g : 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
- p :会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
- w file :将缓冲区中的内容写到指定的 file 文件中;
- & : 用正则表达式匹配的内容进行替换;
- : 匹配第 n 个子串,该子串之前在 pattern 中用 ( ) 指定。
- : 转义(转义替换部分包含:&、 等)。
- sed d 删除的脚本命令
- 格式 : [address]d
- 通过行号指定 sed ‘3d’ file 删除第三行
- 通过特定区间指定 sed ‘2,4d’ file 删除2-4行
- 通过特殊的文件结尾字符 sed ‘3,$d’ file 删除第三行到末尾
- d 脚本命令会删除指定行中的所有内容。但使用该命令时要特别小心,如果你忘记指定具体行的话,文件中的所有内容都会被删除。例如 sed ‘d’ file
- sed a 和 i 脚本指令
- a 命令表示在指定行的后面附加一行,i 命令表示在指定行的前面插入一行。两个命令的基本格式完全相同sew
- 格式 : [address]a(或 i)新文本内容 grep ‘2acontext’ file 在第二行之后加上内容
- 如果需要将多行数据添加到数据流中,只需要在插入或者附加的文本的每一行末尾(除最后一行)添加反斜线即可
- sed c 替换脚本命令
- c 命令表示将指定行中的所有内容,替换成该选项后面的字符串。
- 格式为 : [address]c用于替换的新文本
- sed ‘2ccontext’ file 将第二行替换成context
- sed y 转换脚本命令
- y 转换命令是唯一可以处理单个字符的 sed 脚本命令
- [address]y/inchars/outchars/
- 转换命令会对 inchars 和 outchars 值进行一对一的映射,即 inchars 中的第一个字符会被转换为 outchars 中的第一个字符,第二个字符会被转换成 outchars 中的第二个字符...这个映射过程会一直持续到处理完指定字符。如果 inchars 和 outchars 的长度不同,则 sed 会产生一条错误消息。
- sed ‘y/123/789/’ file 将文件中的1替换成7,2替换成8,3替换成9
- sed p 打印脚本命令
- p 命令表示搜索符号条件的行,并输出该行的内容
- 格式为 : [address]p
- sed -n '/number 3/p' data6.txt 包含number 3的那行输出。用 -n 选项和 p 命令配合使用,我们可以禁止输出其他行,只打印包含匹配文本模式的行
- sed –n ‘2,3p’ file 输出2,3行
- sed w 脚本命令
- w 命令用来将文本中指定行的内容写入文件中
- 格式 : [address]w filename
- sed '1,2w test.txt' data6.txt 将data6.txt的1,2行写入test.txt
- sed r 脚本命令
- r 命令用于将一个独立文件的数据插入到当前数据流的指定位置
- [address]r filename
- sed 命令会将 filename 文件中的内容插入到 address 指定行的后面
- sed ‘3r data2.txt’ data1.txt 将data2.txt的内容插到data1.txt的第三行后面。
- sed ‘$r data2.txt’ data1.txt $代表末尾
- sed q退出脚本命令
- q 命令的作用是使 sed 命令在第一次匹配任务结束后,退出 sed 程序,不再进行对后续数据的处理。
- sed '2q' file sed 命令在打印输出第 2 行之后,就停止了,是 q 命令造成的
- sed '/number 1/{ s/number 1/number 0/;q; }' test.txt 使用 q 命令之后,sed 命令会在匹配到 number 1 时,将其替换成 number 0,然后直接退出。
sed ‘1i This is one line of new text. This is another line of new text.' data6.txt