sed自带行编辑器,系统默认行为。 sed用法: sed [option].. 'script' inputfile... 经常使用选项: -n:不输出模式空间内容到屏幕,即不自动打印 -e:多点编辑 -f: /PATH/SCRIPT_FILE:从指定文件读取编辑脚本 -r:支持使用扩展正则表达式 -i:.bak:备份文件并原处编辑 scipt:“地址命令” sed工具: 地址定界: 一、不给地址:对全文进行处理 二、单地址: #:指定的行,$:最后一行 /pattern/:被此处模式所能匹配到的每一行 三、地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ 四、~:步进 1~2奇数行 2~2偶数行
编辑命令: d:删除模式空间匹配的行,并当即启用下一轮循环 p:打印当前模式空间内容,追加到默认输出以后 a[\]test:在指定行后面追加文本 支持使用\n实现多行追加 i[\]test :在行前插入文本 c[\]test: 替换行为单行或多行文本 w /path/somefile:保存模式匹配的行至指定文件 r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后 =:为模式空间中的行打印行号 !:模式空间中匹配行取反处理 s///:查找替换,支持使用其余分隔符,s@@2,s### 替换标记: g:行内全局替换 p:显示替换成功的行 w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
sed示例: sed '2p' /etc/passwd sed -n '2p' /etc/passwd sed-n '1,4p' /etc/passwd sed -n '/root/p' /etc/passwd sed -n '2,/root/p' /etc/passwd 从2行开始 sed -n '/^$/=' fle 显示空行行号 sed -n -e '/^$/p' -e '/^$/=' file sed 'root/a\superman' /etc/passwd行后 sed 'root/i\superman' /etc/passwd行前 sed 'root/c\superman' /etc/passwd代替行
sed示例: sed '/^$/d' file sed '1,10d' file nl /etc/passwd| sed '2,5d' nl /etc/passwd| sed '2a tea' sed 's/test/mytest/g' example sed -n 's/root/&superman/p' /etc/passwd 单词后 sed -n 's/root/superman&/p' /etc/passwd单词前 sed -e 's/dog/cat/' -e 's/hi/lo/' pets sed -i.bak 's/dog/cat/g' pets
高级编辑命令: p: 打印模式空间开端至\n内容,并追加到默认输出以前 h: 把模式空间中的内容覆盖至保持空间中 H:把模式空间中的内容追加至保持空间中 g: 从保持空间取出数据覆盖至模式空间 G:从保持空间取出内容追加至模式空间 x:把模式空间中的内容与保持空间中的内容进行互换 n:读取匹配到的行的下一行覆盖至模式空间 N:读取匹配到的行的下一行追加至模式空间 d:删除模式空间中的行 D:若是模式空间包含换行符,则删除知道第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间从新启动循环。若是模式空间 不包含换行符,则会想发出d命令那样启动正常的新循环
sed示例: sed-n 'n;p' FILE sed '1!G;h;$!d FILE sed 'N;D ' FILE sed '$!d' FILE sed '$!N;$!D' FILE sed 'G' FILE sed 'g' FILE sed '/^$/d;G' FILE sed 'n;d' FILE sed -n '1!G;h;$p' FILE
命令 用法 N 读取新的输入行,并将该行追加到模式空间现有内容以后,来建立多行模式空间。建立后的多行模式空间中,原有内容和新内容用换行符"\n"来分割。 而执行N命令以后,将会继续执行,N以后的命令,N以后命令的对象则是咱们新的模式空间的内容。 注意:多行模式空间中,^匹配整个空间的开始,$匹配整个空间的结尾, 好比上面的 1\n2\n3 开头是1,结尾是3 $!N,最后一行,不执行N命令 D 删除模式空间中,从头开始到第一个嵌入的换行符为止。 它并不会致使新行的输入,而是会返回脚本的顶端,将这些指令应用于空间中剩余的内容 P 输出模式空间中,从头开始到第一个嵌入的换行符为止。 实际运用中,P常常放到N以后,P以前 n 输出当前模式空间的内容,读取下一行替换当前行,替换以后,n命令以后的命令做用到新行上 d 状况模式空间,并致使新行的读入,此时控制将忽略d以后的命令,并转移到脚本的顶端,做用在新的输入行上 p 打印整个模式空间的内容。其余的对模式空间,没啥影响了