三大基本文本处理工具:grep,sed(流编辑器),awk
sed: Stream EDitor 行编辑器:sed 全屏编辑器:vi
sed: 模式空间 默认不编辑文件本身,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;
一. sed的用法: sed [options] 'AddressCommand' file ...(对这些文件中的符合这个地址address指定范围内的行,执行以下命令编辑) -n: 静默模式,不再默认显示模式空间中的内容 -i: 直接修改原文件(这个要注意!!!!!!) -e SCRIPT -e SCRIPT:可以同时执行多个操作(脚本) -f /PATH/TO/SED_SCRIPT 可以把需要执行的多个操作写在一个脚本文件中,执行的时候一行一行的执行脚本中的每一行,就相当于-e 脚本文件第一行 -e 脚本文件第二行。 sed -f /path/to/scripts file -f 指定文件路径 需要执行的文件 -r: 表示使用扩展正则表达式,默认只使用基本正则表达式。
二.Address地址:(地址如何表示,如果不写就表示查找全文) 1、StartLine,EndLine 比如1,100 $:最后一行,$-1:最后第二行 2、/RegExp/(就是正则表达式的模式) “/^root/”:以root字符串开始的行 3、/pattern1/,/pattern2/(/模式1/,/模式2/) 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行 4、LineNumber (只给一个数值) 指定的行 5、StartLine, +N 从startLine开始,向后的N行;
三.Command:一下的指定范围都是通过address指定的 d: 删除符合条件的行; p: 显示符合条件的行(默认显示匹配到的行两次以及没被匹配到的一次,因为sed的默认模式是打印模式空间,可以用-n选项只显示匹配到的一次); a \string: 在指定的行后面追加新行,内容为string \n:可以用于换行,可以和a \string i \string和用追加多行。 i \string: 在指定的行前面添加新行,内容为string r FILE: 将指定的文件的内容添加至符合条件的行处 w FILE: 将地址指定的范围内的行另存至指定的文件中; s/pattern/string/ 修饰符: 查找并替换,默认只替换每行中第一次被模式(正则表达式)匹配到的字符串。 如果希望没行中被模式(正则表达式)匹配到的字符串都替换那么需要加修饰符 g: 全局替换 i: 忽略字符大小写 s///完全可以用三个相同的符号做替换:s###, s@@@
- 练习:如何将一个文件中的单词替换成另一个单词:like-->liker love-->lover sed "s#l..e#l..er#g" ./sed.txt 不能这么使用因为s/pattern/string/ 第二个不匹配正则表达式。 那么就用到了这个符号 &: 引用模式匹配整个串 sed "s#l..e#&r#g" ./sed.txt 同时也可以用正则表达式中的后向引用: (), \1, \2 sed "s#(\l..e)#\1r#g" ./sed.txt 如果这样改呢?like-->Like love-->Love 就只能使用后向引用:sed "s#l(..e)#\L\1#g" ./sed.txt