1. 系统符号与正则符号

系统符号

系统基础符号

美元符号:$

	  · 用于取出变量中的内容
	  · 表示用户命令提示符号
		普通用户为 $ (超级用户为 #)
	  · 表示一行的结尾 vim中快捷键$,到一行的结尾
	  · 用于取出指定列的信息(awk)
	    例:echo {01..999}|xargs -n7|awk '{print $1}'输出1-999,按7列显示,选取第一列打印

叹号符号:!

     · 用于表示取反或者排除意思
     · 命令行中表示取出最近命令   
       但是建议使用 ctrl + r 调取历史命令/history |grep xxx  
       history -c清除历史记录 history -w保存历史命令到家目录的.bash_history里
     · 用于表示强制操作处理
   	   vim底行模式保存 退出 wq! q!

管道符号:|

	  表示管道符号,管道前面命令执行完结果,交给管道后面执行 经常配合xargs命令使用
	  例:
	  查找指定数据信息进行删除
	  find /oldboy -type f -name "oldboy*.txt"|xargs rm
	  find /oldboy -type f -name "oldboy*.txt" -exec rm -rf {} \;
	  find /oldboy -type f -name "oldboy*.txt" -delete
	  查找指定数据信息进行复制
	  find /oldboy -type f -name "oldboy*.txt" |xargs -i cp {} /oldgirl/
	  find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/
	  find /oldboy -type f -name "oldboy*.txt" -exec cp -a {} /oldgirl \;
	  查找指定数据信息进行移动
	  find /oldboy -type f -name "oldboy*.txt" |xargs -i mv {} /oldgirl/
	  find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/
	  find /oldboy -type f -name "oldboy*.txt" -exec mv {} /oldgirl \;
	

井号符号:#

	  表示文件内容注释符号
	  表示用户命令提示符号
	  超级用户为 #

引号符号系列

  	  生成数值序列信息时不用加引号
	  双引号 ""
	  表示输入内容,就是输出内容,但是有时部分信息会被解析(内容为变量时)
	  
	  单引号 ''
	  表示输入内容,就是输出内容 单引号里面是什么,输出的就是什么(所见即所得)
	  
	  反引号 ``
	  表示命令执行结果留下,用于其他命令调用
	  
      美元括号:$()
	  表示命令执行结果留下,用于其他命令调用 类似 反引号

定向符号系列

小于符号:
	  单个小于符号 < 标准输入重定向符号
	  例:tr "a-z" "A-Z" < /etc/hosts
	
	  例:利用tr + /dev/urandom 产生随机数
	  tr -cd 'a-zA-Z0-9'  < /dev/urandom | head -c 6
	
	  两个小于符号 << 标准输入追加重定向符号
      例:
	  cat >> /boy.txt << EOF
	  boy01
	  boy02
	  boy03
	  EOF
	   
大于符号:
	  单个大于符号  >  标准输出重定向符号
				   2>  错误输出重定向符号
	  两个大于符号  >> 标准输出追加重定向符号   
				   2>> 错误输出追加重定向符号

路径信息系列

	  单点符号:.  表示当前目录
	  双点符号:.. 表示上级目录
	  波浪符号: ~  表示用户家目录信息
				   超级用户:/root
				   普通用户:/home/用户名称
	  横线符号: -  两个目录路间进行切换
	               cd - == cd $OLDPWD 作用为切换到上一次访问的目录

逻辑符号系列

	  并且符号:&&  表示前面的命令执行成功,再执行后面的命令
	  或者符号:||  表示前面的名称执行失败,再执行后面的命令
	  
	  例:
	  mkdir /boy11 && echo ok || echo fail
      ok
      mkdir /boy11 && echo ok || echo fail
      mkdir: cannot create directory ‘/boy11’: File exists
      fail

系统通配符号

匹配的是文件名称信息
匹配任意字符信息 *

例:  find /boy -name "boy*"
	  rm -rf /boy/*txt

生成序列信息符号 {}

	  数字序列: {01..10}
	  奇数序列: {01..10..2}奇数序列中间差值是2,所以后面加..2
      偶数序列: {00..10..2}
      字母序列: {a..z}
	  
	  组合序列: {12}{ab}会得到 1a 1b 2a 2b的结果
	  cp boy.txt{,.bak}   --- 快速复制备份数据,结果是cp boy.txt boy.txt.bak
	  cp boy.txt{.bak,}   --- 快速还原备份数据,结果是cp boy.txt.bak boy.txt
基础正则符号

通配符用于匹配文件名信息 基础命令结合使用find cp mv 等命令
正则符号用于匹配文件内容信息 高级命令结合使用grep awk sed命令

正则符号用途说明:
   1. 可以利用符号表达特殊匹配作用
   2. 可以分析日志文件中数据信息
   3. 可以被三剑客命令所调用
	   测试文件准备:
	   cat >>/oldboy/test.txt<<EOF
       I am oldboy teacher!
       I teach linux.
       
       I like badminton ball ,billiard ball and chinese chess!
       my blog is http://oldboy.blog.51cto.com
       our site is http://www.etiantian.org
       my qq num is 49000448.
       
       not 4900000448.
       my god ,i am not oldbey,but OLDBOY!
       EOF

基础正则符号:

	   ^  --- 匹配以什么开头的信息
	      # grep ^m test.txt 
          my blog is http://oldboy.blog.51cto.com
          my qq num is 49000448.
          my god ,i am not oldbey,but OLDBOY!
       $  --- 匹配以什么结尾的信息
	      # grep m$ test.txt 
          my blog is http://oldboy.blog.51cto.com
	   ^$ --- 匹配空行信息
	     grep -v "^$" test.txt 排除空行显示内容

  		.  --- 匹配任意一个字符,且只匹配一个字符  
          # grep g.d test2.txt 
          god
	   *  --- 匹配*前面一个字符连续出现0次或者多次
	      # grep o* test2.txt -o
          o
          oo
          ooo
	   .* --- 匹配所有内容
	      # grep "^m.*m$" test.txt 
          my blog is http://oldboy.blog.51cto.com
	   \  --- 转义符号
	      1) 将有意义符号变得没有意义
		     # grep "\.$" test.txt 
             I teach linux.
             my qq num is 49000448.
             not 4900000448.
		  2) 将没意义字符变得具有意义
		     \t  -- 制表符 
			 \n  -- 换行符
			 \r  -- 换行符
	   []  --- 匹配多个字符信息, 多个字符是或者关系匹配
	   [^] --- 将匹配多个字符信息, 进行排除或者取反   
扩展正则符号

扩展正则符号: (属于高级符号)
三剑客只有awk能识别,grep 与sed想要识别,需要做以下操作转换
grep -E 扩展正则
egrep 扩展正则
sed -r 扩展正则

       +  --- 匹配“+”号前一个字符连续出现1次或者多次
       # grep  -E "o+"  test2.txt 
       god
       good
       goood 
	   例:grep -E [0-9]+ test.txt 匹配+号前连续出现的数字字符
	      grep -E [a-z]+ test.txt 匹配+号前连续出现的字母字符
       ?  --- 匹配 "?" 前一个字符连续出现0次或者1次   	
       
       ?号是一个一个的进行匹配的,+号是一个或者多个的进行匹配	   
       
       例:
	   grep  -E "o?"  test2.txt 
       gd
       god
       good
       goood
       
       grep  -E "o+"  test2.txt -o  通过grep的-o参数,可以看出匹配的过程中,+号是一个或者多个的进行匹配
       o
       oo
       ooo
       
       grep  -E "o?"  test2.txt -o  通过grep的-o参数,可以看出匹配的过程中,  ?号是一个一个的进行匹配的
       o
       o
       o
       o
       o
       o
     {} --- 匹配" {}" 前一个字符连续出现指定次数
     {n,m}  --- 匹配"{}" 前一个字符连续最少n次,最多m次 
     
     例:
     grep -E "o{1,2}" test2.txt 
     god
     good
     goood
     gooood
     goooood
     
     grep -E "o{1,2}" test2.txt -o	查看匹配过程
     o
     oo
     oo
     o
     oo
     oo
     oo
     oo
     o
     {n}  --- 匹配“{}“ 前一个字符连续出现n次
     
     例:
     grep -E "o{2}" test2.txt -o
     oo
     oo
     oo
     oo
     oo
     oo
     
     grep -E "o{2}" test2.txt
     good
     goood
     gooood
     goooood
    {n,} --- 匹配”{}“前一个字符连续最少n次,最多没有限制
    
    例:
     grep -E "o{2,}" test2.txt
    good
    goood
    gooood
    goooood
    
    grep -E "o{2,}" test2.txt -o
    oo
    ooo
    oooo
    ooooo
     {,m} --- 匹配”{}“前一个字符连续最少0次,最多m次 
     
  	 例:
     grep -E "o{,3}" test2.txt
     gd
     god
     good
     goood
     gooood
     goooood
     
     grep -E "o{,3}" test2.txt -o
     o
     oo
     ooo
     ooo
     o
     ooo
     oo
     |  --- 匹配多个字符串信息(这些信息并不在同一行)
     grep -E "oldboy|oldbey" test.txt 
     I am oldboy teacher!
     my blog is http://oldboy.blog.51cto.com
     my god ,i am not oldbey,but OLDBOY!
     
     grep -E "oldb[oe]y" test.txt 
     I am oldboy teacher!
     my blog is http://oldboy.blog.51cto.com
     my god ,i am not oldbey,but OLDBOY! 	   
     
     # grep -Ev "^$|^#|#" /etc/selinux/config 
     SELINUX=enforcing
     SELINUXTYPE=targeted
     () --- 将多个字符组合成一个整体进行匹配指定信息   
     grep -E "(oldboy)" test.txt 
     结果:
     I am oldboy teacher!
     my blog is http://oldboy.blog.51cto.com
     												(两个效果一样)
     grep  "oldboy" test.txt 
     结果:
     I am oldboy teacher!
     my blog is http://oldboy.blog.51cto.com
     
     
        --- 后向引用前项
     echo 54321 | sed -r 's#([0-9]+)#<\1>#g' 	
     ‘\1’代表引用第一个()的内容 \2就代表第二个()的内容
     输出结果:
     <54321>
     
     echo 1234567890 | sed -r 's#([0-9]+)#<\1>#g'
     <1234567890>

例:
如何取出IP地址:
(可以直接用命令:hostname -I)
这里只是为了练习正则
思路 先找出有IP地址行 – 利用正则匹配出IP地址 (ip a s eth0是ip address show eth0的缩写)
IP地址的格式: 数字. 数字. 数字. 数字 (192.168.10.1)
ip a s eth0|grep "inet "| grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
结果就会选中以下两个IP
inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0

可以将三个重复的"[0-9]{1,3}\ .“转换为”([0-9]{1,3}\ .){3}"
ip a s eth0|grep "inet "| grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
inet 10.0.0.201/24 brd 10.0.0.255 scope global noprefixroute eth0
ip a s eth0|grep "inet "| grep -E '([0-9]{1,3}\.?){4}' -o |head -1
10.0.0.201

例:
如何取出mac地址
1.先找出有mac地址那一行
ip a s eth0|grep "link/"
2. 再根据mac地址的规律找出mac地址
grep -E "([0-9a-f]{2}:?){6}"
3. 最后取出相应的mac地址
ip a s eth0 |grep "link/" |grep -E "([0-9a-f]{2}:?){6}" -o |head 1

例:
如何批量创建用户: olddog01 … olddog10 密码信息是随机数, 如何批量完成
(不能使用脚本完成 - for)

   1.如何批量创建用户 
   echo {01..10} 横行显示序列 --> seq 10 纵行显示序列
   所以
   seq -w 10|sed -r 's#(.*)#useradd olddog\1#g'
   useradd olddog01
   useradd olddog02
   useradd olddog03
   useradd olddog04
   useradd olddog05
   useradd olddog06
   useradd olddog07
   useradd olddog08
   useradd olddog09
   useradd olddog10
   
   2.如何生成密码信息
   echo 123456 |passwd --stdin olddog\1 给用户生成密码
  所以:seq 10|sed -r 's#(.*)#useradd olddog\1;echo 123456 |passwd --stdin olddog\1#g'
   
   3.创建随机密码
   生成随机数
   方法1:tr -cd 'a-zA-Z0-9'  < /dev/urandom | head -c 6
   方法2:echo $RANDOM
   方法3:echo 123456 |md5sum|head -c 6
   但是每次输出的数不会变,可以改成:date "+%N" |md5sum|head -c 6
   方便生成随机数
    date "+%N"的意思是用纳秒的格式显示时间
    
    最终实现:
   seq 10|sed -r 's#(.*)#useradd olddog\1;echo `date "+%N" |md5sum|head -c 6`|passwd --stdin olddog\1 '#g'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值