sed命令详解

Posted yzrw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed命令详解相关的知识,希望对你有一定的参考价值。

阅读目录

##查找某一行 指定行号

[[email protected] ~]# sed -n 3p person.txt

103,Alex,COO

查找某一行 模糊

 [[email protected] ~]# sed -n /yy/p person.txt

104,yy,CFO

查找连续的行 指定行号

[[email protected]-40 ~]# sed -n 3,5p person.txt

103,Alex,COO

104,yy,CFO

105,feixue,CIO

查找连续的行 模糊

[[email protected] ~]# sed -n /101/,/103/p person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

找东西要精确用正则

[[email protected] ~]# seq 0 2 20 |sed -n /0/,/10/p

0

2

4

6

8

10

20

[[email protected] ~]# seq 0 2 20 |sed -n /^0/,/10/p

0

2

4

6

8

10

 

显示文件的最后一行

[[email protected] ~]# sed -n $p person.txt

105,feixue,CIO

显示某几行

[[email protected] ~]# sed -n 1p;3p;5p person.txt

101,oldboy,CEO

103,Alex,COO

105,feixue,CIO

1.10 sed 追加内容

i 插入追加
我们想在文件中放入新的内容
方法1   [[email protected] ~]# echo "106.lli.hhk" >> person.txt  
方法2   cat >> person.txt << eof
方法3   sed  i /a
#i === insert 插入某一行的上一行
 #a === append 追加到某一行的下面
[[email protected] ~]# sed 3i 103,hkl person.txt   i 在上面插入
101,oldboy,CEO
102,zhangyao,CTO
103,hkl
103,Alex,COO
 [[email protected] ~]# sed 2aoldboy person.txt  a追加到后面
101,oldboy,CEO
102,zhangyao,CTO
oldboy
103,Alex,COO
要想内容生效在sed 后加参数 –i
sed  -i  3i 103,hkl person.txt

 

第2章 shell 编程

2.1 什么是shell

       命令大礼包

       判断 循环

2.1.1 shell的作用:    

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

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

[[email protected] ~]# echo $SHELL
/bin/bash

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

[[email protected] ~]# sh
sh-4.1# bash

[[email protected] ~]#

2.3 书写shell脚本的要求

位置统一存放,便于管理

[[email protected] scripts]# pwd
/server/scripts

脚本内容

技术分享图片
[[email protected] scripts]# vim show.sh
#!/bin/bash    ##使用的命令解释器
#filename:show.sh  ##文件名
#desc: miaoshu      ##描述

/sbin/ifconfig eth0|awk -F "[: ]+" ‘NR==2{print $4}‘
技术分享图片

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

[[email protected] 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命令,可以列出系统中,所有的变量

技术分享图片
[[email protected] 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 创建一个普通变量

[[email protected] scripts]# ZNIX=clsn
[[email protected] scripts]# echo $ZNIX
clsn

2.5.2 临时创建环境变量

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

[[email protected] scripts]# export ZNIX=clsn
[[email protected] scripts]# env|grep clsn
ZNIX=clsn

2.5.3 让环境变量永久生效

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

[[email protected] scripts]# echo ‘export ZNIX=clsn‘ >> /etc/profile

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

[[email protected] scripts]# source /etc/profile

2.6 shell脚本与变量

2.6.1 脚本的内容:

[[email protected] scripts]# cat show2.sh

#!/bin/bash

echo $a

2.6.2 shell与普通变量

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

[[email protected] scripts]# a=100

[[email protected] scripts]# sh show2.sh

2.6.3 shell与全局变量

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

[[email protected] scripts]# export a=100
[[email protected] 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 取变量的时候将变量用{ } 包起来

技术分享图片
[[email protected] ~]# www=123
[[email protected] ~]# echo $www
123

[[email protected] ~]# echo $wwwday
[[email protected] ~]# echo ${www}day
123day
技术分享图片

2.9 shell中的特殊变量

2.9.1 $数字 与 $0

技术分享图片
[[email protected] scripts]# cat para.sh
#!/bin/bash
echo $1 $2 $3 ... $0

[[email protected] 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 先写出一个模板。

技术分享图片
[[email protected] scripts]# cat  cal.sh
#!/bin/bash

echo 1+2|bc

[[email protected] scripts]# sh cal.sh
3
技术分享图片

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

技术分享图片
[[email protected] scripts]# cat  cal.sh
#!/bin/bash

echo $1 + $2|bc

[[email protected] scripts]# sh cal.sh 100 50
150
技术分享图片

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

技术分享图片
[[email protected] 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 执行脚本,进行计算。

[[email protected] scripts]# sh  cal.sh  4 6
10
-2
24
0
4096

2.9.3 awk的计算方法

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

[[email protected] scripts]# awk -va=1 -vb=10 ‘BEGIN{print a/b }‘
0.1

2.9.3.2 将awk命令放入脚本中

技术分享图片
[[email protected] scripts]# tail -2 cal.sh
#!/bin/bash
a=$1
b=$2

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1/num2}‘
技术分享图片

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

[[email protected] 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在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉;最初的解决办法为:用vi去打开文件再粘贴上去,但其实是可以对vim编辑器进行设置修改的。

vim clsn.txt #<--编辑一个文件
:set paste #<--在vim的命令行模式输入,关闭vim缩进功能

  说明:然后再进入插入模式粘贴,代码就不会被自动缩进了,可以敲代码的时候需要自动缩进,所以还需要改回来

:set nopaste #<--开启vim缩进功能

  比较方便的方法就是修改用户家目录下的 .vimrc配置文件:

set pastetoggle=<F9>

  说明:

    以后在插入模式下,只要按F9键就可以快速切换自动缩进模式了

 用sed和awk实现将文本中的上下两行合并为一行

  文本内容

[[email protected] tmp]# cat -n /tmp/test.txt 
     1    bss_data 1
     2    Data  1 2 3 4 5 6 7 
     3    bss_data 2
     4    Data  1 2 3 4 5 6 7 

  使用sed命令实现

[[email protected] tmp]#  sed -n ‘{N;s#\\n#\\t#p}‘ test.txt|cat -n 
     1    bss_data 1    Data  1 2 3 4 5 6 7 
     2    bss_data 2    Data  1 2 3 4 5 6 7 

  N 命令,将下一行读入并附加到当前行后面,以 \\n (换行符)分隔,一起存在模式缓冲区内。

  awk命令实现

[[email protected] tmp]# awk ‘{tmp=$0;getline;print tmp"\\t"$0}‘ test.txt|cat -n
     1    bss_data 1    Data  1 2 3 4 5 6 7 
     2    bss_data 2    Data  1 2 3 4 5 6 7 



以上是关于sed命令详解的主要内容,如果未能解决你的问题,请参考以下文章

linux文本三剑客之sed命令详解

sed命令详解

SED命令详解

linux之sed命令详解

Linux学习011sed命令详解

sed命令详解