shell 脚本

shell的三剑客:

sed:修改文本

grep:过滤文本

awk:处理文本

sed:

和正则表达式一起使用,用于匹配删除,追加等操作,比如:

//如果仅仅想替换行中的部分数据,就要使用“s”动作了。g 使得 sed 对文件中所有符合的字符串都被替换, 
//修改后内容会到标准输出,不会修改原文件 ,修改反映到原文件,需要加-i
[root@localhost ~]$ sed 's/旧字串/新字串/g' 文件名
[root@localhost ~]$ sed '行范围s/旧字串/新字串/g' 文件名

//c为替换字符串。
[root@localhost ~]$ sed -i '2c No such person' student.txt  //第二行开始全部替换为No such person
//并且-i :标识直接修改到源文件,没有-i,则知识将修改反馈到屏幕上。

[root@localhost ~]$ sed '2a hello' student.txt  //a:标识追加数据  #在第二行后加入 hello

[root@localhost ~]$ sed '2i hello' student.txt  //i: 标识插入数据 在第二行插入hello

[root@localhost ~]$ sed  '2,4d' student.txt  // d :标识删除数据,#删除第二行到第四行数据

[root@localhost ~]$ sed -n  '2p' student.txt  //p: 标识查看文件数据,输出到屏幕,-n标识只显示某一行数据
1       AAA      66         66       66           66

grep:

和正则表达式一起使用,用于文本搜索匹配查询内容等,输出到标准输出。比如:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。

.*   #一起用代表任意字符。

[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。

\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b    #单词锁定符,如: '\bgrep\b'只匹配grep。

awk :

awk options 'pattern {action}' file

其中,options 可以控制 AWK 的行为,pattern 用于匹配输入数据的模式,{action} 是在匹配到模式的行上执行的动作。如果省略 pattern,AWK 将对所有行进行操作;如果省略 {action},默认动作是打印整行。

常用选项参数

-F <分隔符> 或 --field-separator=<分隔符>:指定输入字段的分隔符,默认是空格。

-v <变量名>=<值>:设置 AWK 内部的变量值。

-f <脚本文件>:指定一个包含 AWK 脚本的文件。

-V 或 --version:显示 AWK 的版本信息。

-h 或 --help:显示 AWK 的帮助信息。

    实例

    #正则表达式需要使用''括起来
    grep -n 'the' filename  打印出行号
    grep -in 'the' filename 不区分大小写打印出所有含有the的行
    grep -o 'the' filename 打印出匹配到的the的内容。
    grep -vn 'the' filename 反向查找,打印出不包含the的行的内容
    grep -cn 'the' 统计含有the的行的数量
    grep -f filename filename2 打印出两个文件相同的内容
    grep '^$' filename -n 查找空行  
    grep '\.$' -n filename  找出.结尾的行
    grep '^#' filename -vn | grep '^$' -v  //去掉#开头的行和空行
    grep -nr "xxx"  //当前目录查找文件内容xxx
    意思就是通过grep '^#' filename -vn去掉#开头的行,输出到管道,然后再管道中执行grep '^$' -v 去掉空行
    
    
    sed -n '3,5p' filename 打印3-5行的内容
    sed -n '3,5d' filename 删除3-5行的内容
    sed 's/e/E/2' filename 将每一行的第二个e替换为E
    sed 's/e/E/g' filename 将所有行的e替换为E
    sed '/^[a-z]/g' filename 打印出a-z开头的所有行
    sed 's/^/#/g' 每一行的行首添加#
    sed '/the/s/^/#/g' 将含有the的行的开头添加#
    sed '/^$/d'  删除空行
    
    sed '/inux/p' filename -n  输出含有linux的行
    sed '/linux/d' filanem     删除含有inux的行。但不修改源文件
    sed '/linux/d' filaneme -i 删除含有linux的行,并修改源文件(-i)
    sed '4,$d' filaneme -i 删除4行开始到结束的行,并写入文件
    
    sed "4a i am cjjc" filename   往文件第四行的下一行添加i am cjjc
    sed "4a i am cjjc" filename -i 
    sed "a ----------" filename -i 往文件的每一行下方都添加一个---------- 
    sed "4i i am cjjc" filename -i  往文件第四行的上一行添加i am cjjc
    
    
    #利用sed取出ifconfig eth0中的ip地址
    cjjc@cjjc-None:~/Qt5.14.2/Tools/QtCreator/bin$ ifconfig ens33 | sed '2s/^.*inet//p' -n
     172.16.1.13  netmask 255.255.255.0  broadcast 172.16.1.255
    cjjc@cjjc-None:~/Qt5.14.2/Tools/QtCreator/bin$
    ifconfig ens33 | sed '2s/^.*inet//p' -n | sed 's/net.*$//p' -n
      172.16.1.13
     #就是用ip地址前字符替换成空格,后面的也替换成空格
    sed '2s/^.*inet//p' -n //匹配前面任意字符到inet的字符串并替换成空,并且打印出来,
       //-n取消sed的默认输出
    
    
    awk -F" " 空格分割,-F":" :作为分割
    awk -F" " '(NR==2){print $1}' awktest.txt /打印第二行第一列
    ifconfig ens160|awk -F" " 'NR==2{print "ip:" $2}'  //取出ip地址
    ifconfig ens160|awk '/netmask/{print "ip:" $2}'//取出ip地址,以netmask作为结束,
                                                    //去除前面第二列的数据

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值