语系对正则的影响

不同语系的编码方式不同,在相同正则表达式的情况下,有可能造成截取的结果不一样,这时应该注意当前环境的语系

正则基础

(又是你,正则 = =!!)
正则:Regular Expression
在Linux中,正则经常搭配|grep来进行处理

特殊符号

  1. [:alnum:]代表[a-z A-Z 0-9]
  2. [:alpha:]代表[a-z A-Z]
  3. [:lower:]代表[a-z]
  4. [:upper:]代表[A-Z]
  5. [:digit:]代表[0-9]
  6. [:xdigit:]16位数字:[0-9 a-f A-F]
  7. [:blank:]代表空格和tab
  8. [:graph:]除了空格和tab的其他按键
  9. [:print:]任何可以被打印出来的字符
  10. [:punct:]代表标点符号
  11. [:space:]任何会产生空格的符号

    进阶的grep

    grep [-A] [-B] '带搜索的字符串' filename

  12. [-A]即After,后面可跟数字,表示将找到的字符串后面n行也列出来

  13. [-B]即Before,后面可跟数字,表示将找到的字符串前面n行也列出来

    Linux中的限定连续

    '*'代表匹配0到n此,若我们想匹配指定次数的字符,则可以使用\{num\},在bash中{}是有特殊意义的,所以要用转义符
    此外限定连续还能这样用1. \{2,5\}:匹配2个到5个 2. \{2,\}:匹配两个以上

    Sed工具

    sed [-nefri] [action]
    参数:

  14. -n即silent模式,默认情况下sed会显示所有的文件内容,加上-n后,只会显示经过特殊处理的内容(相当于过滤不想要的信息

  15. -f将sed的动作写在一个文件内,sed通过-f filename可以执行filename内的动作
  16. -esed通过指令执行动作
  17. -r表示支持延伸型正则表达,预设是基础型正则表达
  18. -i表示对源文件进行直接修改,而不是打印到屏幕

动作(action):[n1,[n2]] action

  1. n1,n2代表行数选择,可以不写
  2. action:
    1. -a:新增,后接字符串,字符串会出现在下一行
    2. -c:整行取代,后接字符串,字符串将取代n1,n2之间的行
    3. -d:删除,删除n1,n2之间的行
    4. -i:插入,同新增,只不过字符串会出现在上一行
    5. -p:打印,
    6. -s:字符取代,搭配正规表示法:例如1,20/oldS/newS/g
  3. 扩展:

    1. 多行插入:使用\+enter

      awk工具

      sed工具用来处理每一行,而awk工具则是用来处理一行之间的每个字段
      1. awk '条件类型1{动作1} 条件类型2{动作2}' filename
      awk默认以空格和tab来判断字段的分隔
      1. last -n 5 | awk '{print $1 "\t" $3}'
      用$加数字,来取这一行的指定字段,注意:$0表示取得的是整行
      此外awk还有一些内建变量:
  4. NF:每一行的字段总数

  5. NR:这是第几行
  6. FS:目前的分隔符

awk的比较判断:

  1. cat /etc/passwd |awk'BEGIN {FS=':'} $3<10{print $1 "\t" $3}'

上例的意思是,先用BEGIN指定该awk命令的分隔符为':',再将第三个元素与10进行判断,若其小于10,在进行后面的打印工作

diff命令

  1. diff [-bBi] file1 file2

参数:

  1. -b忽略一行中的多个空白字符
  2. -B忽略空白行
  3. -i忽略大小写

要能看懂比较差异后的结果,例如1. 4d3代表左边第4行被删了,基准是右边的第3行。2.6c5左边第6行被整行替换成右边第5行