""" note: txt文档通用说明 '#!' - 主标题 '##' - 子标题 '-/-' - 子事项 '---' - 事项说明 '-1-' - 详细事项 '# 1.' - 要点事项说明 'note:' - 注意事项 """ #! sed总结 ## sed命名格式 --- sed [option] 'command' file(s) --- sed [option] -f scriptsfile file(s) ## sed命令参数 -/- 常用参数 --- -e script/--expression=script: 指定的script添加到已有命令中来处理输入的文本文件 --- -f script/--files=script: 指定的script文件中的命令添加到已有命令中来处理输入的文本文件 --- -h/--help: 帮助 --- -n/--quiet --silent: 仅输出script处理后的结果,与flag中p参数一同使用 --- -v/--version: 版本信息 --- -r: 扩展正则 ## sed扩展 --- &: 保存已传递给sed的值/已匹配的字符串标记 --- \u: 大写字母(可配合&大小写替换) --- \l: 小写字母(可配合&大小写替换) --- //: 正则 --- {}: 命令组合,命令用分号分隔{1h;G},可以理解为-e参数的另一种写法 ## sed命令command参数 -/- command命令表达式 -1- 基础格式 --- sed '[address1],[address2][func][flag]' -2- 正则匹配行 --- sed '/[regular]/[func]' filename -3- 匹配一个范围(n到m行) --- sed 'n,m[func]' filename -4- 匹配n到最后一行 --- sed -n 'n,$p' filename -5- 替换 --- sed '[address][func]' filename --- sed '[func]' filename -5- 多个表达式 --- sed 'command' | sed 'command' --- sed 'command1; command2' -/- function参数 --- a(a\ para): 在当前行后面加入一行文本 --- c\: 用新的文本改变本行的文本 --- i(i\ para): 在当前行上面插入文本 --- d: 删除,删除选择的行 --- D: 删除模板块的第一行 --- s: 替换指定字符 --- h: 拷贝模板块的内容到内存中的缓冲区 --- H: 追加模板块的内容到内存中的缓冲区 --- g: 获得内存缓冲区的内容,并替代当前模板块中文本 --- G: 获得内存缓冲区的内容,并追加到当前模板块文本的后面 --- l: 列表不能打印字符的清单 --- n: 读取下一个输入行,用下一个命令处理新的行而不是第一个命令 --- N: 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码 --- p: 打印模板块的行 --- P: 打印模板块的第一行 --- q: 退出sed --- b: label 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾 --- r: file 从file中读行 --- t: label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾 --- T: label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾 --- w: file 写并追加模板块到file末尾 --- W: file 写并追加模板块的第一行到file末尾 --- !: 取反 --- =: 打印当前行号 --- #: 把注释扩展到第一个换行符以前 -/- flag标记参数,以下参数放到sed的替换中解释 -1- n: 1~512 之间的数字,表示指定要替换匹配行的字符串出现第几次时才进行替换 -2- g: 对数据中所有匹配到的内容进行替换,如果没有参数g,则仅会在第一次匹配成功时做替换操作 -3- p: 打印与替换命令中指定的模式匹配的行,通常与-n选项一起使用 -4- w file: 将缓冲区中的内容写到指定的file文件中 -5- &: 保存已传递给sed的值/已匹配的字符串标记 -6- \n: 匹配第n个子串,该子串之前在pattern中用\(\)或者()指定 -7- \: 转义 ## sed命令s字符串替换 -/- s替换格式 --- sed [option] '[address]s/[pattern]/[replacement]/flag' note: --- 其中s///中定界符/可替换成其他特殊字符,但是关键字s必须保留 --- 例:s### s%%% -/- s替换flag标记参数 -1- n: 1~512 之间的数字,表示指定要替换匹配行的字符串出现第几次时才进行替换 # 1.替换特定行第二个n.n数据,并精简输出 --- sed -nr '/[address]/s#([0-9]\.[0-9])#test#2 p' filename -2- g: 对数据中所有匹配到的内容进行替换,如果没有参数g,则仅会在第一次匹配成功时做替换操作 # 1.替换匹配行所有n.n数据 --- sed -nr '/[address]/s#([0-9]\.[0-9])#test#g p' filename -3- p: 打印与替换命令中指定的模式匹配的行,通常与-n选项一起使用 # 1.替换匹配行所有n.n数据,并输出 --- sed -r '/[address]/s#([0-9]\.[0-9])#test#g p' filename -4- w file: 将缓冲区中的内容写到指定的file文件中 # 1.替换匹配行所有n.n数据,并保存到file1 --- sed -r '/[address]/s#([0-9]\.[0-9])#test#w file1 ' filename -5- &: 保存已传递给sed的值/已匹配的字符串标记 # 1.字符串修改增加,n.n替换成n.ntest --- sed -r '/[address]/s#([0-9]\.[0-9])#&test#p' filename # 2.字符串修改,aabbcc替换成aaxxcc --- echo 'aabbcc' | sed -r 's/b+/xx/p' # 3.字符串修改,aabbcc替换成aabbxxcc --- echo 'aabbcc' | sed -r 's/b+/&xx/p' -6- \n: 匹配第n个子串,该子串之前在pattern中用\(\)或者()指定 # 1.将第一列数字和第二列数字对换位置 --- sed -rn 's/([0-9]+)[[:space:]]+([0-9]+)/\2 \1/g p' filename -7- \: 转义 # 1.在不使用扩展正则,且字符串包含特殊字符串 --- sed -n '/address/ s/\([0-9]+\)[[:space:]]+\([0-9]+\)/\1 \2/p' filename ## sed命令y字符串变形替换 -/- 替换格式,类似s字符串替换,y是替换整个字符串,没有[address]块 # 1.将文件中所有大写的A/B/C/D单个字符替换成小写的 --- sed 'y/ABCD/abcd/' filename ## sed空间模式 ## 案例 -1- 打印并显示行号 --- sed -nre '1,$p' -e '1,$=' filename -2- 匹配第n行,并匹配n到m行 --- sed -n 'n,+mp' filename -3- 匹配第n行,并从n行起匹配步长值为m的行 --- sed -n 'n~mp' filename -4- 匹配第n行,并从n行匹配到下一个m的倍数行 --- sed -n 'n,~mp' filename -5- 匹配除了第n到m行的行 --- sed -nr -e 'p' -e 'n,m!=' filename -6- 匹配example开头的行,并将temp1替换成test1,temp2替换成test2并输出 --- sed -nr '/^example/s#temp1#test1#;s#temp2#test1#p' filename -7- 组合命令扩展写法: 匹配输出1到4行,从第二行开始不输出行号 --- sed -n '{1,4p;3,$!=}' filename -8- 匹配以temp1开头的行,并将temp1开头行的下一个行内temp2替换为test1 --- sed -n '/^temp1/{n;s/temp2/test1/g p}' filename -9- 特定数列输出: 从第n行开始,输出步长值为m的行 --- sed -n 'n~m' filename -10- 输出奇数行/偶数行特殊用法 -1- 偶数行 --- sed -n 'n;p' filename -2- 奇数行 --- sed -n 'p;n' filename -11- 将匹配行及下面两行转换成同一行 --- sed -nr '/^([0-9][0-9])/{N;N;s/\n/\t/g p}' filename -12- 匹配不以"#","WARN"开头的行,并每行末尾增加"X" --- sed -nr '/^#|^WARN/! s/(.*)/&X/p' filename