第1章 sed命令详解

1.1 查找固定的某一行

1.1.1 awk命令方法

[root@znix ~]# awk '!/oldboy/' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

1.1.2 grep方法

[root@znix ~]# grep -v "oldboy" person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

1.1.3 sed方法

[root@znix ~]# sed -n '/oldboy/!p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@znix ~]# sed '/oldboy/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 将oldboy替换程oldboyedu

&表示前面找到的东西。

[root@znix ~]# sed 's#oldboy#&edu#g' person.txt

101,oldboyedu,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

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

[root@znix ~]# sed 's#[0-9]#<&>#g' person.txt

<1><0><1>,oldboy,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@znix ~]# sed 's#[0-9]#<&>#' person.txt

<1>01,oldboy,CEO

<1>02,zhangyao,CTO

<1>03,Alex,COO

<1>04,yy,CFO

<1>05,feixue,CIO

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

[root@znix ~]# sed 's#[0-9]#<&>#2' person.txt

1<0>1,oldboy,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@znix ~]# sed 's#[0-9]#<&>#2g' person.txt

1<0><1>,oldboy,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@znix ~]# echo '$LANG $(hostname) {1..3}'

$LANG $(hostname) {1..3}

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

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

en_US.UTF-8 znix {1..3}

1.3.3 不加引号:支持通配符

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

en_US.UTF-8 znix 1 2 3

1.4 sed与变量

1.4.1 在变量中放入一行内容

[root@znix ~]# a=hello

[root@znix ~]# a='hello world'

[root@znix ~]# echo $a

hello world

1.4.2 查看下文件的内容

[root@znix ~]# cat person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

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

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

[root@znix ~]# sub=oldboy

[root@znix ~]# sed "s#$sub#znix#g" person.txt

101,znix,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

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

[root@znix ~]# sub=oldboy

[root@znix ~]# aim=znix

[root@znix ~]# sed "s#$sub#$aim#g" person.txt

101,znix,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@znix ~]# 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@znix ~]# 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@znix ~]# 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@znix ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g|bash

1.5.6 第五步检查结果

[root@znix ~]# 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@znix ~]# chkconfig |sed -r  '/sshd|network|crond|rsyslog|sysstat/d;s#(^.*)0:.*#chkconfig \1 off#g'|bash

1.5.7.2 示例二

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

1.6 &符号的使用

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

[root@znix ~]# echo oldboy123

oldboy123

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

oldboy123

[root@znix ~]# echo oldboy123|sed 's#.*1#{&}#g'

{oldboy1}23

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

1.7.1 文件内容

[root@znix ~]# cat person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

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

[root@znix ~]# sed -r '/yy/s#[0-9]##g' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

,yy,CFO

105,feixue,CIO

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

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

[root@znix ~]# sed -rn '/yy/!s#[0-9]##gp' person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

,feixue,CIO

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

[root@znix ~]# info sed

faq 经常遇到的问题,经常有人问的问题

第2章 shell 编程

2.1 什么是shell

命令大礼包

判断 循环

2.1.1 shell的作用:

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

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

[root@znix ~]# echo $SHELL

/bin/bash

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

[root@znix ~]# sh

sh-4.1# bash

[root@znix ~]#

2.3 书写shell脚本的要求

位置统一存放,便于管理

[root@znix scripts]# pwd

/server/scripts

脚本内容

[root@znix scripts]# vim show.sh

#!/bin/bash    ##使用的命令解释器

#filename:show.sh  ##文件名

#desc: miaoshu      ##描述

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

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

[root@znix scripts]# sh show.sh

10.0.0.201

2.4 shell脚本之变量

2.4.1 什么是变量

举个栗子:

znix                变量的名字

$znix               查看变量里的内容

znix="access"       修改变量的内容

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

2.4.2 环境变量(全局变量)

2.4.2.1 特点

1)大写

2)在linux里面都生效

2.4.2.2 查看系统中的环境变量

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

[root@znix scripts]# env

HOSTNAME=znix

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@znix scripts]# ZNIX=clsn

[root@znix scripts]# echo $ZNIX

clsn

2.5.2 临时创建环境变量

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

[root@znix scripts]# export ZNIX=clsn

[root@znix scripts]# env|grep clsn

ZNIX=clsn

2.5.3 让环境变量永久生效

2.5.3.1 将 export ZNIX=clsn 放入 /etc/profile

[root@znix scripts]# echo 'export ZNIX=clsn' >> /etc/profile

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

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

2.6 shell脚本与变量

2.6.1 脚本的内容:

[root@znix scripts]# cat show2.sh

#!/bin/bash

echo $a

2.6.2 shell与普通变量

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

[root@znix scripts]# a=100

[root@znix scripts]# sh show2.sh

2.6.3 shell与全局变量

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

[root@znix scripts]# export a=100

[root@znix 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@znix ~]# www=123

[root@znix ~]# echo $www

123

[root@znix ~]# echo $wwwday

[root@znix ~]# echo ${www}day

123day

2.9 shell中的特殊变量

2.9.1 $数字 与 $0

[root@znix scripts]# cat para.sh

#!/bin/bash

echo $1 $2 $3 ... $0

[root@znix 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@znix scripts]# cat  cal.sh

#!/bin/bash

echo 1+2|bc

[root@znix scripts]# sh cal.sh

3

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

[root@znix scripts]# cat  cal.sh

#!/bin/bash

echo $1 + $2|bc

[root@znix scripts]# sh cal.sh 100 50

150

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

[root@znix 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@znix scripts]# sh  cal.sh  4 6

10

-2

24

0

4096

2.9.3 awk的计算方法

2.9.3.1 awk使用 -v 参数 指定变量。

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

0.1

2.9.3.2 将awk命令放入脚本中

[root@znix 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@znix scripts]# sh cal.sh 10 23

0.434783

第3章 vim 高级使用技巧

3.1 vim中进行查找替换

命令

含义

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

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

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

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

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

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

:%s#$1#$a#g      

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

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

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

3.2 vim 快捷键

ctrl + v    按d批量删除

ctrl + v    按x批量删除

dd        删除光标所在行

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

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

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

sed命令详解 vim高级技巧 shell编程上的更多相关文章

  1. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  2. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  3. Linux学习之sed命令详解

    概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...

  4. 【转】【Linux】sed命令详解

    sed命令详解 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令 ...

  5. sed命令详解 (转载)

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

  6. 【文本处理命令】之sed命令详解

    sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...

  7. 【转】sed命令详解

    原文:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为: sed [-nefri]  'command' ...

  8. Linux Shell脚本编程--sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  9. shell 三剑客之 sed 命令详解

    sed 编辑命令 sed 编辑命令对照表 把 /etc/passwd 文件赋值到当前路径下,进行操作 cp /etc/passwd ./ cat -n passwd sed 删除操作 删除 passw ...

随机推荐

  1. AngularJS–service(服务)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 服务 Angular的服务也是使用依赖注入(dependency injection ( ...

  2. 记2017问鼎杯预赛的wp---来自一个小菜鸡的感想

    这次准备写一下几个misc和密码题目..很坑. 打了一整天的比赛,越来越觉得自己很菜了. 有一道题目叫做"真真假假",这道题目只有一个提示--Xor.第一眼知道是异或,也就知道这一 ...

  3. thinkphp增删改查

    添加数据: (添加单行数据) // 添加成功返回1,失败返回0 (添加多行数据) // 返回添加数据的条数 删除数据: 修改数据: (修改单个字段) (修改多个字段) // 修改成功返回1,失败返回0 ...

  4. 简单Elixir游戏服设计-创建玩家模型

    删除model.ex 创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了. 选择 map 代表数据,是为了扩展数据结构,方便增加功能.struct也是可以的. add_num ...

  5. 【转】 Python subprocess模块学习总结

    从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.comman ...

  6. HDU1205 吃糖果

    吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submis ...

  7. es6零基础学习之项目目录创建(一)

    和大家分享一下在学习es6的过程中所积累的东西,也希望更多的朋友能够互相学习 首先创建项目目录 打开你的命令行,什么文件下都可以,大家请随意,我自己用的git,输入 mkdir es6 创建一个完整的 ...

  8. 改变ListBoxItem选中的颜色

    改变ListBoxItem主要是改变的style 下面直接看代码吧!!! <Style TargetType="{x:Type ListBoxItem}"> <S ...

  9. mybatis的搭建和注入spring的方式

    mybatis实际上是一个更多关注sql语句的框架,他的出现是想让开发者更简单的去操作数据库. 与hibernate相比较,hibernate更多的是去sql化,虽然hibernate也可以本地sql ...

  10. Windows-universal-samples-master示例 XamlCommanding

    Windows-universal-samples-master XamlCommanding 运行默认如果是 ARM会出现没有引用System,只要在调试选择CPU为PC的就好 默认 选择PC平台 ...