2022
我们一起努力

sed命令详解 Vim高级技巧 Shell编程上(shell sed命令详解)

第1章 sed命令详解
1.1 查找固定的某一行
1.1.1 awk命令方法

[root@downzz ~]# awk '!/downzz/' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.1.2 grep方法

[root@downzz ~]# grep -v "downzz" person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.1.3 sed方法

[root@downzz ~]# sed -n '/downzz/!p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

[root@downzz ~]# sed '/downzz/d' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.2 sed的替换

s为 sub(substitute)替换

g  global  表示全局替换

1.2.1 将downzz替换程oldboyedu

&表示前面找到的东西。

[root@downzz ~]# sed 's#downzz#&edu#g' person.txt
101,downzzedu,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.2.2 把文件中的数字都替换成<num>样式。

[root@downzz ~]# sed 's#[0-9]#<&>#g' person.txt
<1><0><1>,downzz,CEO
<1><0><2>,zhangyao,CTO
<1><0><3>,Alex,COO
<1><0><4>,yy,CFO
<1><0><5>,feixue,CIO

      g表示把sed命令找到的内容进行替换,不加g 只替换找到的第一个。

[root@downzz ~]# sed 's#[0-9]#<&>#' person.txt
<1>01,downzz,CEO
<1>02,zhangyao,CTO
<1>03,Alex,COO
<1>04,yy,CFO
<1>05,feixue,CIO

1.2.3 把前面正则表达式找到的第二列内容进行替换

[root@downzz ~]# sed 's#[0-9]#<&>#2' person.txt
1<0>1,downzz,CEO
1<0>2,zhangyao,CTO
1<0>3,Alex,COO
1<0>4,yy,CFO
1<0>5,feixue,CIO

1.2.4 把前面正则表达式找到的第二列以后内容进行替换

[root@downzz ~]# sed 's#[0-9]#<&>#2g' person.txt
1<0><1>,downzz,CEO
1<0><2>,zhangyao,CTO
1<0><3>,Alex,COO
1<0><4>,yy,CFO
1<0><5>,feixue,CIO

1.3 单引号 双引号 不加引号的区别
1.3.1 单引号: 所见即所得

[root@downzz ~]# echo '$LANG $(hostname) {1..3}'
$LANG $(hostname) {1..3}

1.3.2 双引号: 对特殊符号进行解析

[root@downzz ~]# echo "$LANG $(hostname) {1..3}"
en_US.UTF-8 downzz {1..3}

1.3.3 不加引号:支持通配符

[root@downzz ~]# echo $LANG $(hostname) {1..3}
en_US.UTF-8 downzz 1 2 3

1.4 sed与变量
1.4.1 在变量中放入一行内容

[root@downzz ~]# a=hello
[root@downzz ~]# a='hello world'
[root@downzz ~]# echo $a
hello world

1.4.2 查看下文件的内容

[root@downzz ~]# cat person.txt
101,downzz,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.4.3 定义一个变量,对变量进行替换

双引号里面,能够对变量进行解析

[root@downzz ~]# sub=downzz
[root@downzz ~]# sed "s#$sub#downzz#g" person.txt
101,downzz,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.4.4 将两个变量分别放置,用变量替换变量。

[root@downzz ~]# sub=downzz
[root@downzz ~]# aim=downzz
[root@znix ~]# sed "s#$sub#$aim#g" person.txt
101,downzz,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.5 【企业案例】系统开机启动项优化

将chkconfig中的除 sshd|network|crond|rsyslog|sysstat 之外的全部关闭。

1.5.1 各项服务的含义

crond   定时任务
sshd    远程连接服务
network 网络
sysstat 系统工具
rsyslog 系统日志服务 system log
        CentOS 6.x 7.x 中系统日志服务为rsyslog
        centos 5.x 里面系统日志服务为 syslog

1.5.2 第一步把想要保留的排除走

[root@downzz ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d'
abrt-ccpp      0:off   1:off   2:off   3:off   4:off   5:off   6:off
abrtd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid          0:off   1:off   2:off   3:off   4:off   5:off   6:off
atd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
auditd         0:off   1:off   2:off   3:off   4:off   5:off   6:off
blk-availability    0:off   1:on    2:off   3:off   4:off   5:off   6:off
cpuspeed       0:off   1:on    2:off   3:off   4:off   5:off   6:off
……

1.5.3 第二步取出服务的名字

[root@downzz ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g'  
abrt-ccpp     
abrtd         
acpid         
atd           
auditd        
blk-availability   
cpuspeed      
……

1.5.4 第三步拼接出想要的形状

[root@downzz ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#chkconfig \1 off #g'
chkconfig abrt-ccpp          off
chkconfig abrtd              off
chkconfig acpid              off
chkconfig atd                off
chkconfig auditd             off
chkconfig blk-availability  off
……

1.5.5 第四步交给bash执行

[root@downzz ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g|bash

1.5.6 第五步检查结果

[root@downzz ~]# chkconfig |grep "3:on"
crond          0:off   1:off   2:on    3:on    4:on    5:on    6:off
network        0:off   1:off   2:on    3:on    4:on    5:on    6:off
rsyslog        0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat        0:off   1:on    2:on    3:on    4:on    5:on    6:off

1.5.7 简化命令
1.5.7.1 示例一:

 [root@downzz ~]# chkconfig |sed -r ‘/sshd|network|crond|rsyslog|sysstat/d;s#(^.*)0:.*#chkconfig \1 off#g’|bash 

1.5.7.2 示例二

 [root@downzz ~]# chkconfig |sed -rn ‘/sshd|network|crond|rsyslog|sysstat/!s#^(.*)0:.*#chkconfig \1 off#gp’|bash 

1.6 &符号的使用

&符号找东西会把剩下的显示出来

[root@downzz ~]# echo downzz123
oldboy123

[root@downzz ~]# echo downzz123|sed 's#.*1#&#g'
downzz123

[root@downzz ~]# echo downzz123|sed 's#.*1#{&}#g'
{downzz1}23

1.7 【练习题】把person.txt 中包含yy的行 这一行里面的数字替换为空
1.7.1 文件内容

[root@downzz ~]# cat person.txt
101,downzz,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.7.2 /yy/查找yy这行,使用s###g对文件内容进行替换

[root@downzz ~]# sed -r '/yy/s#[0-9]##g' person.txt
101,downzz,CEO
102,zhangyao,CTO
103,Alex,COO
,yy,CFO
105,feixue,CIO

1.7.3 将不包含yy的行进行替换

-n 取消默认输出,所以yy那一行不会输出

[root@downzz ~]# sed -rn '/yy/!s#[0-9]##gp' person.txt
,downzz,CEO
,zhangyao,CTO
,Alex,COO
,feixue,CIO

1.8 查看sed更多的帮助信息【info】

[root@downzz ~]# info sed
faq 经常遇到的问题,经常有人问的问题

第2章 shell 编程
2.1 什么是shell

      命令大礼包

      判断 循环

2.1.1 shell的作用:   

      为重复性的工作节约时间,省事

2.2 如何查看当前用户的命令解释器

[root@downzz ~]# echo $SHELL
/bin/bash

2.2.1.1 shell修改为 sh 会有一些问题

[root@downzz ~]# sh
sh-4.1# bash

[root@downzz ~]#

2.3 书写shell脚本的要求

位置统一存放,便于管理

[root@downzz scripts]# pwd
/server/scripts

脚本内容

[root@downzz scripts]# vim show.sh
#!/bin/bash    ##使用的命令解释器
#filename:show.sh  ##文件名
#desc: miaoshu      ##描述

/sbin/ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'

脚本中尽量使用命令的绝对路径

[root@downzz scripts]# sh show.sh
10.0.0.201

2.4 shell脚本之变量
2.4.1 什么是变量

举个栗子:

downzz                变量的名字
$downzz               查看变量里的内容
downzz="access"       修改变量的内容

      修改变量的时候最好使用引号将内容引起来。

2.4.2 环境变量(全局变量)
2.4.2.1 特点

1)大写

2)在linux里面都生效

2.4.2.2 查看系统中的环境变量

使用env命令,可以列出系统中,所有的变量

[root@downzz scripts]# env
HOSTNAME=downzz
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.0.0.1 3156 22
SSH_TTY=/dev/pts/1
USER=root
……

2.5 手动创建一个环境变量
2.5.1 创建一个普通变量

[root@downzz scripts]# downzz=linuxmi
[root@downzz scripts]# echo $downzz
linuxmi

2.5.2 临时创建环境变量

关键:export 是创建环境变量使用的

[root@downzz scripts]# export downzz=linuxmi
[root@downzz scripts]# env|grep linuxmi
downzz=linuxmi

2.5.3 让环境变量永久生效
2.5.3.1 将 export downzz=linuxmi 放入 /etc/profile

[root@downzz scripts]# echo 'export downzz=linuxmi' >> /etc/profile

2.5.3.2 让写入的内容生效 ,使用source /etc/profile

[root@downzz scripts]# source /etc/profile

2.6 shell脚本与变量
2.6.1 脚本的内容:

[root@downzz scripts]# cat show2.sh

#!/bin/bash

echo $a

2.6.2 shell与普通变量

只在当前的shell中生效,执行脚本的时候,很产生一个新的shell环境(子shell)。普通变量不能对系统中其他的shell环境产生影响,普通变量没用了。

[root@downzz scripts]# a=100

[root@downzz scripts]# sh show2.sh

2.6.3 shell与全局变量

全局变量对系统中所有的shell环境都有效,export 在系统任何一个地方都承认他。

[root@downzz scripts]# export a=100
[root@downzz scripts]# sh show2.sh
100

2.7 与用户有关的环境变量配置文件/目录

/etc/motd 用户登陆到系统后显示的信息

2.7.1 全局环境变量配置文件

    /etc/profile
    /etc/bashrc
    /etc/profile.d/     (目录)

2.7.2 用户环境变量

    ~/.bash_proflie
    ~/.bashrc

2.8 变量命名规则

变量名可以是字母、数字或下划线 的组合。

      但是不能是以数字开头。   

可以以下划线开头。

2.8.1 取变量的时候将变量用{ } 包起来

[root@downzz ~]# www=123
[root@downzz ~]# echo $www
123

[root@downzz ~]# echo $wwwday
[root@downzz ~]# echo ${www}day
123day

2.9 shell中的特殊变量
2.9.1 $数字 与 $0

[root@downzz scripts]# cat para.sh
#!/bin/bash
echo $1 $2 $3 ... $0

[root@downzz scripts]# sh para.sh  a b c
a b c ... para.sh

$1  添加到Shell的各参数值。$1是第1参数、$2是第2参数

$0  脚本文件的名字

2.9.2 [练习] 使用变量写一个简单的计算器。
2.9.2.1 先写出一个模板。

[root@downzz scripts]# cat  cal.sh
#!/bin/bash

echo 1+2|bc

[root@downzz scripts]# sh cal.sh
3

2.9.2.2 将期中的内容替换成为变量

[root@downzz scripts]# cat  cal.sh
#!/bin/bash

echo $1 + $2|bc

[root@downzz scripts]# sh cal.sh 100 50
150

2.9.2.3 将里面的计算方式增加。

[root@downzz scripts]# vim cal.sh
#!/bin/bash
echo $1 + $2|bc
echo $1 - $2|bc
echo $1*$2|bc      ### *在这里有不能有空格
echo $1 / $2|bc
echo $1 ^ $2|bc

2.9.2.4 执行脚本,进行计算。

[root@downzz scripts]# sh  cal.sh  4 6
10
-2
24
0
4096

2.9.3 awk的计算方法
2.9.3.1 awk使用 -v 参数 指定变量。

[root@downzz scripts]# awk -va=1 -vb=10 'BEGIN{print a/b }'
0.1

2.9.3.2 将awk命令放入脚本中

[root@downzz scripts]# tail -2 cal.sh
#!/bin/bash
a=$1
b=$2

awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}'

2.9.3.3 测试脚本,检查脚本的执行结果。

[root@downzz scripts]# sh cal.sh 10 23
0.434783

第3章 vim 高级使用技巧
3.1 vim中进行查找替换

命令

含义

:4,s# s# 1#$a#g     

从第4行到最后一行进行替换   

:5,s#s# 1#$a#g   

从第5行到最后一行进行替换

:1,s#s# 1#$a#g   

从第一行到最后一行进行替换

:%s#1#1# a#g     

从第一行到最后一行进行替换

:.s,$s#echo#sed#g 

从当前行到最后一行(. 表示当前行)

 3.2 vim 快捷键

 

ctrl + v    按d批量删除

ctrl + v    按x批量删除

dd       删除光标所在行

dG       删除光标所在行到最后一行

D        光标所在位置到行尾的内容

x         删除光标所在位置的一个字符

Vim入门基础知识集锦 

Vim入门基础教程

把Vim打造成优秀的C++ IDE 

Ubuntu 14.04升级Vim7.4到8.0 

Vim安装youcompleteme自动补全插件 

Linux Vim编辑器使用简单讲解 

Vim文本编辑器 

Vim安装与配置进阶版

Vim编辑器使用教程 

Ubuntu 16.04 Vim YouCompleteMe自动补全的安装配置与使用 

Linux文本编辑器Vim基础教程 

:http://

本文从互联网转载,来源地址:www.downzz.com/shell/18507.html,原作者保留一切权利,若侵权或引用不当,请联系茶猫云(cmy.cn)删除。【茶猫云,优质云服务器提供商】

赞(0)
文章名称:《sed命令详解 Vim高级技巧 Shell编程上(shell sed命令详解)》
文章链接:https://www.fzvps.com/34710.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!