sed命令详解 vim高级技巧 shell编程上
第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编程上的更多相关文章
- Linux shell sed 命令详解
详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...
- 转 linux之sed命令详解
http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed 编辑裁剪文件命令 sed -i "s/\/db\/te ...
- Linux学习之sed命令详解
概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...
- 【转】【Linux】sed命令详解
sed命令详解 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令 ...
- sed命令详解 (转载)
sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...
- 【文本处理命令】之sed命令详解
sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...
- 【转】sed命令详解
原文:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为: sed [-nefri] 'command' ...
- Linux Shell脚本编程--sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- shell 三剑客之 sed 命令详解
sed 编辑命令 sed 编辑命令对照表 把 /etc/passwd 文件赋值到当前路径下,进行操作 cp /etc/passwd ./ cat -n passwd sed 删除操作 删除 passw ...
随机推荐
- Java IO学习笔记(一)
一.概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.在两设备间的传输的数据称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,以进行数据操作. 二.流分类 数据类型 ...
- [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...
- JSP入门 文件上传
commons-fileupload public void save(HttpServletRequest request,HttpServletResponse response) throws ...
- C++PrimerPlus第6版 第四章——复合类型
1,复合类型主要包含:数组.结构.联合.枚举.类.指针.引用等. 2,数组.长度必须确定.即编译阶段,数组的长度就得确定好.所以只能使用常量(#define.const)声明数组长度.如果使用变量声明 ...
- 关于AVALON总线动态地址对齐
在NIOS的使用中,我们往往要用到自定义外设,然后通过AVALON交换架构和NIOSII进行通信. AVALON总线,其实是一种交换架构的协议,在自定义外设挂在AVALON总线上时,一定要注意地址对齐 ...
- WordPress-基础设置之阅读设置
对于第一次使用Wordpress系统的朋友,请先别着急发布文章及进行其他操作,为了更加科学的使用及管理wordpress,应该需要对其进行相关设置,主要涉及3个部分,一.常规设置,二.阅读设置,三.固 ...
- DSCP 与IP 优先级IP优先级
在IPv4的报文头中,TOS字段是1字节,如下图所示.根据RFC1122的定义,IP优先级(IPPrecedence)使用最高3比特(第0-2比特).+++++++++++++++++++++++++ ...
- Python系列之文件操作、冒泡算法、装饰器、及递归
文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...
- 将 Intent 序列化,像 Uri 一样传递 Intent!!!
一.真的需要new一个Intent吗? 在 Android 中,打开一个 Activity ,有多少种方式?不过不管是使用什么方式,最终都没办法逃避创建一个 Intent ,然后startActivi ...
- FirstIDL
pro FIRSTIDL ;控制台输出 print,'first IDL' ;控制台输出 void=dialog_message('Hello,IDL world!',/information) en ...