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 : 匹配第 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 '2a\context' file 在第二行之后加上内容
如果需要将多行数据添加到数据流中, 只需要在插入或者附加的文本的每一行末尾 (除最后一行) 添加反斜线即可
sed '1iThis is one line of new text.This is another line of new text.' data6.txt
sed c 替换脚本命令
c 命令表示将指定行中的所有内容, 替换成该选项后面的字符串.
格式为 : [address]c \ 用于替换的新文本
sed '2c\context' 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, 然后直接退出.
来源: http://www.bubuko.com/infodetail-3379286.html