“Linux-2018-spring-5-15”的版本间的差异

来自SUDA-HLT
跳到导航 跳到搜索
(创建页面,内容为“一、复习 *正则表达式 1、vi中支持基本的正则表达式语法 vi中查找:$vim a.txt ; /std (查找) :s/std/st...”)
 
 
第31行: 第31行:
 
   ()
 
   ()
 
   &
 
   &
 +
二、新内容
 +
1、sed (stream editor)
 +
  语法sed [opt] "cmd" file
 +
 +
  编辑  ----vim 打开文件替换
 +
        ----sed:不用打开文件
 +
            sed 's/std/stdin/g' main.txt > main.2.txt :main.txt内容不变,定界符还可以为#
 +
            sed -i 's/std/stdin/g' main.2.txt :会替换掉main.2.txt中的内容
 +
 +
            sed  -r 's/^([0-9]*)([/t ]*)([^/t ]*)/\3\2\1/' main.txt :(第一个^表示一行的开始,\1表示第一分组(括号)匹配的内容)
 +
            sed  -r 's/^(([0-9]*)([/t ]*)([^/t ]*))/\4\3\2/' main.txt :分组按照左括号开始匹配内容
 +
            sed -r 's/std[inout]*/(&)/g' main.2.txt
 +
 +
  删除      sed '2,&d' main.txt
 +
              sed '/^std/d' main.txt 删除以std开头的行

2018年5月15日 (二) 06:12的最新版本

一、复习

  • 正则表达式

1、vi中支持基本的正则表达式语法

  vi中查找:$vim a.txt ;   
            /std (查找)
            :s/std/stdin/(当前行的第一个std替换成stdin)   
            :s/std/stdin/g(当前行std全局替换成stdin,第一个/是定界符)   
            :%s/std/stdin/(所有行的第一个std替换成stdin) 
            :%s/std/stdin/g(所有行std全局替换成stdin,第一个/是定界符) 等价于:0,$s/std/stdin/g
            :s/std/stdin/3(当前行开始3行的第一个std替换成stdin)   
            :s/std/stdin/g3(当前行开始3行的std全局替换成stdin)
            :26s/std/stdin/g(26行std全局替换成stdin,第一个/是定界符)
            :23,26s/std/stdin/g(23到26行std全局替换成stdin,第一个/是定界符)
            :.,$s/std/stdin/g(当前行到文章末尾std全局替换成stdin,第一个/是定界符)
            :.,.+3s/std/stdin/g(当前行开始3行std全局替换成stdin)
            :s/std[inout]*/(&)/g2(当前行开始2行stdin或者stdout全局替换成加括号的stdin和stdout)
            :15,20d(删除15到20行)
            :0,.d(删除零到当前行)

2、基本语法

 .
 [] 
 [a-Z]:字符类(集合),只能匹配一个字符
 [0-9]等价于\d(预定义字符类)等价于digit:
 [^]
 [ \t\r\n]:空白符(空格,tab,回车)等价于\s等价于space:
 *
 ?
 {}
 ()
 &

二、新内容 1、sed (stream editor)

  语法sed [opt] "cmd" file
  编辑  ----vim 打开文件替换
        ----sed:不用打开文件
            sed 's/std/stdin/g' main.txt > main.2.txt :main.txt内容不变,定界符还可以为#
            sed -i 's/std/stdin/g' main.2.txt :会替换掉main.2.txt中的内容
            sed  -r 's/^([0-9]*)([/t ]*)([^/t ]*)/\3\2\1/' main.txt :(第一个^表示一行的开始,\1表示第一分组(括号)匹配的内容)
            sed  -r 's/^(([0-9]*)([/t ]*)([^/t ]*))/\4\3\2/' main.txt :分组按照左括号开始匹配内容
            sed -r 's/std[inout]*/(&)/g' main.2.txt 
  删除       sed '2,&d' main.txt
             sed '/^std/d' main.txt 删除以std开头的行