xiang8 发表于 2018-8-26 07:23:11

shell 编程(难题分析)

  一、基础知识:http://www.aminglinux.com/bbs/thread-6833-1-1.html
  一、grep
  用grep把passwd文档中包含'root'或者‘500’的行过滤出来,并在过滤出来的行前面加上行号.
  grep -n 'root\|500' passwd
  r.o             如r1o,rto都满足该条件,.表示匹配一个字符,仅仅一个字符
  ooo*          如oo,ooo,oooo...都满足该条件,既表示在*前面的一个字符或者n个都满足该条件,计算方法oo+0个o,oo+1个o都满足
  r.*t            如rjidsjidishdi/: sjht 在r与t之间任意字符都满足
  二、sed的字符位置互换
  如将test3:x:505:505::/home/test3:/bin/bash中的test3与bash替换位置,首先需要将这该该段划分,具体划分如下
  (test3)(:x:505:505::/home/test3:/bin/)(bash)
  1             2             3   #通过括号将该段分为3段
  (test3) (         .*      )(bash)   #第2段通过.*代替
  sed 's/\(test3\)\(.*\)\(bash\)/\3\2\1/'文件名   #替换的方式,“\”表转意
  bash:x:505:505::/home/test3:/bin/test3            #执行后的结果
  替换中,如果不加g参数,那么只会把查到的第一个匹配的值进行替换,如语句(root:x:0:0:root:/root:/bin/bash)执行了sed 's/r//' 后,得到如下的语句
  oot:x:0:0:root:/root:/bin/bash,那么说明只有第一个r被替换为空,其他的则没有影响。
  2、把/etc/passwd中出现的第一个数字和最后一个单词替换位置
  原始数据
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  --------------------------------------
  sed '1,$s/\(\)\(.*\)\(\)/\3\2\1/g' passwd
  -------------------------------------------------------------
  root:x:h:0:root:/root:/bin/bas0
  bin:x:n:1:bin:/bin:/sbin/nologi1   #执行的结果是已每一行为一个单位,把出现的第一个数字与最后一个单词执行了替换。
  3、在passwd 20行到末行最前面加 'aaa:'
  sed '20,$s/\(.*\)/aaa:\1/' passwd    # “(.*)”表示的就是整个
  sed '20,$s/\(.*\)/aaa:&/' passwd    #&代表(.*)的内容
  执行后的部分结果
  aaa:apache:x:48:48:Apache:/var/www:/sbin/nologin
  aaa:rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
  aaa:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
  aaa:smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
  aaa:webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
  sed的大小写替换
  sed中,使用\u表示大写,\l表示小写
  1. 把每个单词的第一个小写字母变大写:
  sed 's/\b/\u&/g' filename
  2. 把所有小写变大写:
  sed 's//\u&/g' filename
  3. 大写变小写:
  sed 's//\l&/g' filename
  三、awk
  基础知识:http://www.aminglinux.com/bbs/thread-6833-1-1.html
  截取文档中的某段 awk -F ':' '{print $1}' 1.txt
  也可以使用自定义字符连接每个段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
  匹配字符或字符串 awk '/oo/' 1.txt
  针对某个段匹配 awk -F ':' '$1 ~/oo/' 1.txt
  多次匹配 awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt   # $1 ~/test/ 表示匹配内容为第一段为test
  条件操作符==, >,=;
页: [1]
查看完整版本: shell 编程(难题分析)