您的位置:首页 > 运维架构 > Linux

2017-8-13linux学习记录

2017-08-13 22:22 169 查看
bashrc 类

profile 类 两个都是初始化bash

 了解 NFS网络文件系统 rpcbind

查看PATH(环境变量)  echo $PATH

 给系统添加环境变量的时候用 export ,由export关键字处理过的变量叫做环境变量, 使变量的值对当前shell的所有子进程都可见
#cat &  #jobs  查看后台运行的程序
sed

     sed处理文本文件时,首先会被读到模式空间中,而不修改原文件。sed可以对文本文件的所有行进行操作,也可以通过正则表达式进行匹配,使得sed可以只处理模式空间中的被正则表达式匹配到的行。

然后再判断模式空间中的文本是否会被正则表达式匹配到,如果匹配到,就会对匹配到的文本做编辑操作,之后再将被编辑的文本和没有被编辑的文本一同输出到标准输出 如果模式空间没有被正则表达式匹配到,直接将没有被匹配到的文本原样输出至标准输出
常用的选项

    -n:不输出模式模式中的内容至屏幕,也就是不会将没有匹配到的文本输出到标准输出,只是输出编辑到的文本

                  #sed '1,2p' first 把1-2连同源文件打印出来

                  #sed -n '1,2p' first  打印1-2两行

[root@momo01 ~]# cat first

aaaaa

bbbbb

ccccc

[root@momo01 ~]# sed '1,2p' first

aaaaa

aaaaa

bbbbb

bbbbb

ccccc

[root@momo01 ~]# sed -n '1,2p' first

aaaaa

bbbbb
    -e 脚本:可以指定多个脚本,实现多次编辑
    -f 脚本文件: 每一行一个编辑命令
    -i:直接修改原文件
    -r: 表示使用扩展的正则表达式

执行删除命令时,不改变原文件  #sed '1,3d' first 删除文件first的1-3行

  [root@momo01 ~]# sed '1,2d' first

ccccc

[root@momo01 ~]# cat first

aaaaa

bbbbb

ccccc
   

#sed -i '1,2d' first    修改原文件

[root@momo01 ~]# sed -i '1,2d' first

[root@momo01 ~]# cat first

ccccc

编辑命令 (与vim的末行模式类似)d命令是特例,需要特别注意,不能加-n选项    

     d: 删除,对应d命令而言,没有匹配到的文本是不会输出到标准输出的。例如:下面的sed对yhy文件进行处理,不会将没有匹配到文本的输出至标准输出,而是将编辑后的文本输出到标准输出

例如:

[root@7 ~]# cat yhy

111

222

333

444

[root@7 ~]# sed '1,3d' yhy

444
p: 打印
a\字符串: append 追加,在行后面追加字符串,支持使用\n实现多行追加

例如:sed '2a\xxx' /first:表示在第2行后面,也就是第3行插入xxx字符串,其后的行依次向下移动

[root@momo01 ~]# cat first

aaaaa

bbbbb

ccccc

[root@momo01 ~]# sed '2a\xxx' first

aaaaa

bbbbb

xxx

ccccc
i\字符串:在行前面插入字符串,支持使用\n实现多行插入
c\字符串:把匹配到的行替换为字符串

例如:sed '2c\yyy' first 将第2行替换为yyy字符串

[root@momo01 ~]# sed '2c\yyy' first

aaaaa

yyy

ccccc
w 文件路径:将匹配到的行重定向至指定的文件中

例如:sed '/^[^#]/w yhy.txt' /etc/fstab  将非井号开头的行保存至yhy.txt文件中
r 文件路径:读取指定文件的内容插入到当前文件被匹配到的行处

例如: sed '3r /etc/issue' /etc/fstab 将/etc/issue中的内容插入到/etc/fstab第3行的文本后面
=:表示被模式匹配到的行上面加上一个行号

[root@momo01 ~]# sed '/^b/=' first

aaaaa

2

bbbbb

ccccc
!:取反条件

例如:sed '/^c/!d' first  将不是以c开头的行删除

[root@momo01 ~]# sed '/^c/!d' first

ccccc
s///:查找替换,常用的有s@@@, s### ,

    修饰符有:

        g:全局替换,表示可以替换一行中多次匹配到的字符串。如果不加g,那么只能替换一行中第一次出现的字符串

        w 文件路径:替换成功的结果保存至指定文件中

        p :显示替换成功的行
   sed [选项] 脚本  文件

             [root@momo01 ~]# sed 's/b/a/g' first

              aaaaa

              aaaaa

              ccccc

             [root@momo01 ~]# sed 's/b/a/' first

              aaaaa

              abbbb

              ccccc

             [root@mom
9e7e
o01 ~]# sed 's/b/a/p' first

              aaaaa

              abbbb

              abbbb

              ccccc

 练习题

     0:sed 's/^\#//' /etc/first 删除以#号开头的行    不加地址定界符表示全文匹配,不加执行操作表示删除
       1:删除/etc/grub2.cfg文件中所有的以空白字符开头的行的行首的所有空白字符

               sed 's/^[[:space:]]\+//' /etc/grub2.cfg
       2:删除/etc/fstab文件中所有以#开头的行的行首的#号且紧跟#号后面的所有空白字符

               sed -r 's/^#[[:space:]]*//' /etc/fstab
       3:输出一个绝对路径给sed命令,取出其文件名

               echo "/var/log/messages" | sed -r 's#^.*/(.*)#\1#'  正确

               echo "/var/log/messages" | sed -r 's/^.*/(.*)/\1/'  错误

               echo "/var/log/messages" | sed 's/^.*\/\(.*\)/\1/'  正确, 不用扩展正则表达式
       4:输出一个绝对路径给sed命令,取出其目录名,相当于dirname

                echo "/var/log/messasdfasdf/" | sed -r 's#(.*)/.*#\1#'

sed与egrep都是对行进行处理, sed不仅能匹配到行,还能对文本进行处理

cut对字段(列)进行处理

 
sed -r 's/^[[:space:]]+//'  first   删除空白字符(查找替换)

sed -r '/^[[:space:]]*$/d'  first   删除空白行 (命令操作)

[root@momo01 ~]# cat first

    aaaaa

bbbbb

        ccccc
  ddddd

[root@momo01 ~]# sed -r 's/^[[:space:]]+//' first

aaaaa

bbbbb

ccccc
ddddd

[root@momo01 ~]# sed -r '/^[[:space:]]*$/d'  first

    aaaaa

bbbbb

        ccccc

  ddddd

a=1

强引用  "echo $a"  输出 1

弱引用  'echo $a'   输出 $a

 
bash---shell
   文件名用 .sh的方式,然后用 vi 或 vim 进入编辑模式

   脚本语言文件格式:第一行 #!/bin/bash :定义bash脚本解释器

   注释信息:#
 编辑完保存退出之后,常用的运行shell脚本有两种方式

1,  [root@momo01 ~]# ./first.sh

     -bash: ./first.sh: 权限不够

     [root@momo01 ~]# chmod +x first.sh

     [root@momo01 ~]# ./first.sh

      9

2,  [root@momo01 ~]# bash first.sh

       9

  bash中支持的运算符以及变量赋值的表达时候
          + , - , * , / , % , **
        1:let var=$var1+$var2
        2:var=$[expression]:这里虽然expression是字符表

               达式,但是通过 $[ ]之后就变成了算数运算, 例如:var=

                $[ 1+2 ]
        3:var=$(命令)  这里是将命令输出的结果赋值var变量
           4:注意:乘法有些时候需要转义
        5:let i=$i+1 等价于 let i+=# 等价于 let i++

           let i=$i-1 等价于 let i-=# 等价于 let i--

例:

     [root@momo01 ~]# a=2

     [root@momo01 ~]# b=3

     [root@momo01 ~]# c=$a+$b

     [root@momo01 ~]# echo $c

       2+3

     [root@momo01 ~]# c=$[ $a+$b ]

     [root@momo01 ~]# echo $c

       5

     [root@momo01 ~]# let c=$a+$b

     [root@momo01 ~]# echo $c

       5
1 .计算/etc/passwd文件中的第5个用户和第6个用户的id号之和

[root@momo01 ~]# sed -n '5p' /etc/passwd |cut -d: -f3

4

[root@momo01 ~]# sed -n '6p' /etc/passwd |cut -d: -f3

5

[root@momo01 ~]# vim first.sh

#!/bin/bash

 uid5=$(sed -n '5p' /etc/passwd |cut -d: -f3)

 uid6=$(sed -n '6p' /etc/passwd |cut -d: -f3)

 c=$[$uid5+$uid6]

 echo $c

[root@momo01 ~]# bash first.sh

9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: