Shell脚本基础01

# 整理正则表达式

^ #行首
$ #行尾
. #匹配单个字符除回车
* #匹配前一个字的0次或者任意次
+ #匹配前面一个字符从1次到任意次
? #匹配前面一个字符0次或者1次
.* #匹配所有内容
| #或运算
[] #匹配中括号内任意的的单个字符
[^] #不匹配中括号内的任意单个字符
^[^] #不匹配中括号内字符开头的行
[a-z] #匹配小写英文字母
[A-Z] #匹配大写英文字母
[a-Z] #匹配大小写英文字母
[0-9] #匹配数字
{n} #匹配n次
{n,} #至少匹配N次
{n,m} #匹配n次到m次
() #表示一个子表达式的开始与结束

# grep(正则表达式及字符处理)

  1. 显示出所有含有root的行
    egrep 'root' /etc/passwd
  2. 输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容
    egrep -C2 'bash' /etc/passwd
  3. 显示出有多少行含有nologin。
    egrep -c 'nologin' /etc/passwd
  4. 显示出那些行含有root,并将行号一块输出
    egrep -n 'root' /etc/passwd
  5. 显示出文件
    egrep -l 'root' /etc/passwd
  6. 新建用户abominable\abominate\anomie\atomize编写正则表达式,将他们匹配出来
useradd abominable
useradd abominate
useradd anomie
useradd atomize
egrep '^a[a-Z]+e' /etc/passwd
  1. 建四个用户Alex213sb\Wpq2222b\yH438PIG\egon666\egon过滤出用户名组成是字母+数字+字母的行
useradd Alex213sb
useradd Wpq2222b
useradd yH438PIG
useradd egon666
useradd egon
egrep '^[a-Z]+[0-9]+[a-Z+]+' /etc/passwd
  1. 显示出/etc目录下所有包含root的文件名
    ls /etc/ | egrep '.*root.*'
  2. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
    egrep '^[^#\ ]' /etc/ssh/sshd_config

# Sed

  1. 删除文件每行的第一个字符。
    sed -r 's/^.//' /etc/passwd
  2. 删除文件每行的第二个字符。
    sed -r "s/^(.).(.*)/\1\2/" /etc/passwd
  3. 删除文件每行的最后一个字符。
    sed -r "s/.$//" /etc/passwd
  4. 删除文件每行的倒数第二个字符。
    sed -r “s/(.*).(.)$/\1\2/” /etc/passwd
  5. 删除文件每行的第二个单词。
    sed -r "s/^([a-Z]+)([^a-Z]+)[a-Z]+/\1\2/" /etc/passwd
  6. 删除文件每行的倒数第二个单词。
    sed -r 's/[a-Z]+([^a-Z]+)([a-Z+]+$)/\1\2/' /etc/passwd
  7. 删除文件每行的最后一个单词。
    sed -r 's/[a-Z]+$'// /etc/passwd
  8. 交换每行的第一个字符和第二个字符。
    sed -r 's/^(.)(.)/\2\1/' /etc/passwd
  9. 交换每行的第一个字符和第二个单词。
    sed -r 's/(.)([a-z,A-Z]+)([^a-z,A-Z]+)([a-z,A-Z]+)/\4\2\3\1/' /etc/passwd
  10. 交换每行的第一个单词和最后一个单词。
    sed -r 's/^([a-Z]+)([^a-Z])(.*)([^a-Z])([a-Z]+)/\5\2\3\4\1/' /etc/passwd
  11. 删除一个文件中所有的数字。
    sed -r 's/[0-9]//g' /etc/passwd
  12. 删除每行开头的所有空格。
    sed -r 's/^[\ ]+//' test
  13. 用制表符替换文件中出现的所有空格。
    sed -r 's/[\ ]/\t/g' /etc/passwd
  14. 把所有大写字母用括号()括起来。
    sed -r 's/[A-Z]/(&)/g' /etc/passwd
  15. 打印每行3次。
    sed -r '{p;p}' /etc/passwd
  16. 只显示每行的第一个单词。
    sed -r 's/^(\ *)([a-Z]+).*/\2/' /etc/passwd
  17. 打印每行的第一个单词和第三个单词。
    sed -r 's/^([a-Z]*)([^a-Z]*)([a-Z]*)([^a-Z]*)([a-Z]*).*/\1\5/' test
  18. 用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式
    date "+%m/%Y/%d" | sed -r 's/^([0-9]{2})\/([0-9]{4})\/([0-9]{2})/\1\;\2\;\3/g'
    date "+%m/%Y/%d" | sed -r 's/\//\;/g'

Leave a Reply

Your email address will not be published. Required fields are marked *