sed命令:

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。


语法:

    sed [options] 'command' file(s)

    sed [options] -f scriptfile file(s)


常用选项:

  • -e:允许在同一行里执行多条命令

  • -n:和p命令一起使用表示只打印那些发生替换的行

  • -i:直接编辑源文件

  • -r:使用扩展正则表达式

  • -f:指定的script文件来处理输入的文本文件

  • -h:显示帮助;

  • -V:显示版本信息。


示例:

  1. sed 's/book/books/' file      文本中的book替换成books(每行第一个book)

  2. sed 's/book/books/g' file     文本中所有的book替换成books

  3. sed -n 's/test/TEST/p' file  表示只打印文本中发生替换的行

  4. sed -n '1,4'p 1.txt           打印指定的行

  5. sed -n '/root/'p 1.txt        打印包含指定字符串的行

  6. sed -i 's/book/books/g' file  表示直接修改源文件,文本中所有的book替换成books

  7. sed -i 's/^/#&/' 1.txt           表示每行行首添加#号,直接修改文件

  8. sed '/^$/d' file              删除空白行(注意:d是在后面的,s命令在前面)

  9. sed '2d' file                 删除第二行

  10. sed '2,$d' file               删除第二行到末行所有行

  11. sed '$d' file                 删除最后一行

  12. sed 's/[0-9]//g' 1.txt        删除所有数字(实际上是所有数字替换成空了)

  13. sed 's/[^0-9]//g' 1.txt       删除所有非数字

  14. sed 's/^192/localhost&/' file 所有以192开头的行都会在行首加上localhost

  15. echo "a handsome boy"| sed 's/\w\+/[&]/g'     \w\+ 匹配每一个单词,[&] 替换它,& 表示所匹配到的单词; 结果:[a] [handsome] [boy]

  16. sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' 1.txt   == sed 's#\(root\)\(.*\)\(bash\)#\3\2\1#' 1.txt

        表示:调换两个字符串位置;  /可以使用 #,@ 等

  17. sed -e '/root/p' -e '/body/p' -n 1.txt ==  sed -n '/root/p; /body/p'  1.txt

        实现同时进行多个任务;会显示root或者body的行

  18. sed -n 'p;n' 1.txt  == sed -n '1~2p' 1.txt     打印奇数行

  19. sed -n 'n;p' 1.txt == sed -n '2~2p' 1.txt      打印偶数行

        first~step 表示以first开始,后面每次加step;例如1~2:表示所有的奇数行

  20. sed '=' 1.txt | sed 'N;s/\n/\t/'      显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理

  21. sed G 1.txt                 在每一行后面插入一个空行

  22. sed '{x;p;x}' 1.txt         在每一行前面插入一个空行


练习:

把/etc/passwd 复制到/root/test.txt

  1. 打印所有行

  2. 打印test.txt的3到10行

  3. 打印test.txt 中包含 'root' 的行

  4. 删除test.txt 的15行以及以后所有行

  5. 删除test.txt中包含 'bash' 的行

  6. 替换test.txt 中 'root' 为 'toor'

  7. 替换test.txt中 '/sbin/nologin' 为 '/bin/login'

  8. 删除test.txt中5到10行中所有的数字

  9. 删除test.txt 中所有特殊字符(除了数字以及大小写字母)

  10. 把test.txt中第一个单词和最后一个单词调换位置

  11. 把test.txt中出现的第一个数字和最后一个单词替换位置

  12. 把test.txt 中第一个数字移动到行末尾

  13. 在test.txt 20行到末行最前面加 'aaa:'