Linux中的sed命令

sed - stream editor for filtering and transforming text

   流编辑器的过滤和转换文本

sed [-nerf] [动作]

参数:

  -i 修改源文件 危险

  -e 直接在命令行模式上执行sed的动作编辑

  -f 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作

  -r :使用扩展的正则表达式

  -n 静默模式,默认的sed中所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed特殊处理的那一行才会被列出来。

[[email protected] tmp]# sed "/^a/p" sed.txt   //将以”a“开头的行打印出来,可以看到b也被打印出来了,并且a被打印了两遍,一遍是sed默认就是将模式空间中的内容打印出来,第二遍是p参数又打印了一遍
a
a
b
[[email protected] tmp]# sed -n "/^a/p" sed.txt  //使用-n参数,只讲匹配到的内容打印出来
a
[[email protected] tmp]# 

动作说明:[n1,n2] function

  1.LineNumber

    精确匹配的行

  2.StarLine, +N

    从startline开始,到之后的n行结束,一共是n+1行

  3.StartLine,EndLine

    $ 表示最后一行

[[email protected] tmp]# sed -n "1,2p" /etc/passwd    //打印1-2行的内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[[email protected] tmp]# sed -n "30,\$p" /etc/passwd   //答应30到最后一行的内容
mysql:x:502:502::/home/mysql:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
[[email protected] tmp]# sed -n "30p" /etc/passwd        //打印第30行的内容
mysql:x:502:502::/home/mysql:/sbin/nologin

  4./匹配模式/    支持正则表达式

    如:/^root/

  5./partern/,/partern/

    第一次被partern1匹配到的行开始,至第一次被partern2匹配到的行结束,     这中间的所有行

[[email protected] tmp]# sed -n "/bash$/p" /etc/passwd     //打印以bash结尾的行
root:x:0:0:root:/root:/bin/bash
along:x:501:500::/home/along:/bin/bash
[[email protected] tmp]# sed -n "/^rpc/p" /etc/passwd      //打印以rpc开头的行
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
[[email protected] tmp]# sed -n "/^\(.*\)root/p" /etc/passwd    //打印以任意字符开头,中间有root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] tmp]# 

function  

  d:删除符合条件的行

  p:打印符合条件的行

    使用此命令的话,指定的内容会打印两次,这是因为sed命令默认的就是 将模式空间中的内容打印出来,而p也是打印的意思,所以会重复打印

  a \string : 在指定的行后面追加新的行,内容是string

    a的意思append追加的意思,即在指定行的后边追加内容

[[email protected] tmp]# cat sed.txt
a
b
[[email protected] tmp]# a="c"                   //设置一个变量a
[[email protected] tmp]# sed "2a $a" sed.txt     //在第二行后边追加变量a的值
a
b
c
[[email protected] tmp]# sed "2a \$a" sed.txt    //特殊符号需要转义
a
b
$a
[[email protected] tmp]# 

  i \string:  在指定的行前面添加新的行,内容是string

    ”i“就是insert的意思

[[email protected] tmp]# cat sed.txt
a
b
[[email protected] tmp]# sed ‘1i 1‘ sed.txt      //在指定行的前边添加一行
1
a
b
[[email protected] tmp]# 

  r File:将指定文件的内容添加至符合条件的行处

[[email protected] tmp]# cat sed.txt
a
d
[[email protected] tmp]# cat sed1.txt
b
c
[[email protected] tmp]# sed "2r ./sed1.txt" sed.txt   //将sed1.txt的内容在sed.txt的第二行开始添加
a
d
b
c
[[email protected] tmp]# 

  w File:将指定范围的内容添加至指定的文件中去

[[email protected] tmp]# sed -n "30,\$w ./a.txt" /etc/passwd    //将passwd文件的最后两行写入到a.txt文件中去
[[email protected] tmp]# cat a.txt
mysql:x:502:502::/home/mysql:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
[[email protected] tmp]# 

  s /partern/string/修饰符  查找替换 默认只替换第一次被匹配到的字符串

修饰符:

  g:全局替换

  i:忽略大小写  

    不仅可使用s ///也可以使用s ### s @@@

  s 命令也可以支持后向引用

  &可以做替换用,但是并不适用与所有的情况

  将“l”替换成“L”

时间: 2024-11-10 07:59:19

Linux中的sed命令的相关文章

Linux中使用sed命令替换字符串小结

sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如: sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”: sed 's?原字符串?替换字符串

linux中的压缩命令详细解析(二)

我们在<Linux中的压缩命令详细解析(一)>中已经讲解了常见的三种压缩命令,下面我们开始讲解工作中最常用到的tar命令. 为了使压缩和解压缩变得简单,tar命令就应运而生了.那么究竟该如何使用呢? tar.gz格式: 压缩命令: tar -zcvf 压缩文件名 源文件名 举例: 把abc文件压缩成后缀为tar.gz格式的文件 tar -zcvf abc.tar.gz abc 解压缩命令: 举例:解压缩abc.tar.gz文件 tar -zxvf abc.tar.gz tar.bz2格式: 压

教你在Linux中如何用命令或手动修改文件来添加一个用户

教你在Linux中如何使用命令或手动修改文件添加一个用户 首先我们从一个例子进行引入:添加一个happy用户,基本组为happy(5200),附加组为luzhi. 一.用命令的方法实现: groupadd -g 5200 happy useradd -u 5200 -g happy -G luzhi  happy passwd happy su - happy 这样就这个用户就创建成功了. 下面来演示一下: 验证系统中是否存在happy用户,从输出看是没有存在happy用户的. 2.我们先建一个

Linux中的In命令

ln是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s  源文件 目标文件    -s 是 symbolic的意思. 例:ln  -s  /lib/lsb   /usr/lj即:在usr目录下建立指向/lib/lsb目录的lj文件. 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link

linux中的strings命令简介

摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道strings命令的.我们先用man strings来看看: strings - print the strings of printable characters in files. 意思是, 打印文件中可打印的字符.  我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(te

linux中的strings命令简介2

摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用途, 但据我了解, 还有部分朋友并不常用strings, 这是个不好的习惯. 所以, 本文继续啰嗦一下strings命令. 在软件开发中, 我们经常需要修改代码, 并生成静态库.动态库或者可执行文件, 有时候, 工程太大, 那怎样确定自己改动的代码正确编译到库中去了呢? 用strings命令吧!  

辛星浅析linux中的ac命令

linux中的ac命令根据当前/var/log/wtmp文件中的登录的进入和退出来报告用户连接的时间,默认是以小时为单位,如果不使用标识,则报告的是总时间. 它的主要参数有两个: (1)-d将显示每天的连接时间. (2)-p将显示每个用户的连接时间.

Linux中history历史命令使用方法详解

在/etc/profile里添加如下: #History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if [ ! -d $HISTDIR ]; then         mkdir -p $HISTDIR         chmod 777 $HISTDIR fi export HISTSIZE=100000 export HISTFILE="$HISTDIR/${LOGNAME}.hist"

一张图详解Linux中的top命令

一张图详解Linux中的top命令及每个参数的含义: