linux sed 命令

来源:互联网 发布:淘宝备注怎么备注 编辑:程序博客网 时间:2024/05/20 01:08

一、sed 是一种在线编辑器,一次处理一行内容。

处理过程:

1) 把当前处理的行存储在临时缓冲区,即“模式空间”;

2) 用sed命令处理缓冲区中的内容;

3) 将处理后的缓冲区内容输出到默认标准输出---屏幕;

4) 读取下一行,直到文件末尾;

备注:sed处理的时缓冲区中的内容,即文件内容的副本,原文件内容并未被修改。若使用重定向将处理后的内容重新写回文件,会修改文件内容。

二、sed命令参数

1) -n sed默认将处理过的所有数据(即读到临时缓冲去的内容和处理后的内容)输出到屏幕,-n 参数告诉sed使用安静模式,即只将sed命令处理后的内容输出。

    如:

    [root@host_233 jiall]# vi sed.txt ===> 查看sed.txt 文件内容
    11

    22

    33

    44

    55

   [root@host_233 jiall]# sed '2,4p' sed.txt    ===>   非安静模式  输出 sed.txt  的 2~4行内容
    11

    22  ===> 输出读入临时缓冲区的原sed.txt中的行

    22  ===> 输出'p'(print)命令执行结果

    33

    33

    44

    44

    55

   [root@host_233 jiall]# sed -n '2,4p' sed.txt    ===> 安静模式
    22

    33

    44

2) -e    直接在指令列模式上进行 sed 的动作编辑

    如:

    [root@host_233 jiall]# sed -e 's/1/2/' -e '/5/d' sed.txt ===>数字1,2代表文本内容;5 代表的行号;

    21 ===> 文本替换只进行一次,多次替换使用's/1/2/g'

    22

    33

    44

    ===> 第五行被删除

3) -f    将待执行的sed命令写到文件中,通过 -f  filename 导入

4) -i    直接修改文件内容,不输出到屏幕

5) -r    使用扩展型正则表示语法(不甚理解,还需研究!


三、 sed 动作说明

[n1[,n2]]function

n1: 执行动作的开始行;

n2: 执行动作的结束行;

function:执行的动作;


function可指定为:

a:(add)增加   将a后面的内容增加到当前行的下一行;

c:取代                   用c后的内容取代n1~n2之间的行;

d:(delete) 删除 删掉d之前选择的内容;

i:(insert) 插入 将i后面的内容增加到当前行的上一行;

p:(print) 打印 将p前选择的内容打印;

s: 取代 配合正则表达式使用

&:


四、 sed 命令使用示例

1) d命令 删除

   #sed '2d' sed.txt

   11

   33

   44

   55

   #sed '2,$d' sed.txt

   #sed '$d' sed.txt

   #sed '/333/d' sed.txt

2) s命令 替换

   #sed ‘s/111/666/’ sed.txt

   #sed ‘s/111/666/g’ sed.txt

   #sed -n 's/^111/666/p' sed.txt

   #sed 's/^111/&666/' sed.txt

   #sed -n 's/\(love\)able/\1rs/p' sed.txt

   #sed 's#10#100#g' sed.txt

3) 逗号 选定行的范围 通过行号或行部分/全部内容界定行

   #sed -n ‘/111/,/333/p’ sed.txt

   #sed -n '5,/^555/p' sed.txt

   #sed '/test/,/check/s/$/sed test/' sed.txt

4) 多点编辑 e命令

   #sed -e '1,5d' -e 's/test/check/' sed.txt

命令执行顺序影响结果


sed --expression='s/test/check/' --expression='/love/d'    //--expression能给sed表达式赋值。
sed '/test/r file'   //r命令:file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
sed -n '/test/w file'   //w命令 所有包含test的行都被写入file里。
sed '/^test/a\\--->this is a example'   //a命令:'this is aexample'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
sed '2a Drink tea or ......\ drink beer ?'  //在第二行后追加多行,行之间必须已反斜线分隔
sed '2,5c No 2-5 number'  //c命令: 将2-5行的内容取代为 No 2-5 number
sed -n '5,7p'    //p命令:列出5-7行


数据搜寻并执行命令
cat /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' //搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行

sed 's/要被取代的字串/新的字串/g'
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'  //查询IP

插入:i命令
sed '/test/i\\
new
line
-------------------------' example  // 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。
sed '2a drink tea' example //在第二行后(亦即是加在第三行)加上drink tea
sed '2i drink tea' example //在第二行前插入


下一个:n命令
sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。


变形:y命令
sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。


退出:q命令
sed '10q' example-----打印完第10行后,退出sed。


保持和获取:h命令和G命令
sed -e '/test/h' -e '$G example
-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将
打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保
持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中
的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。


保持和互换:h命令和x命令
sed -e '/test/h' -e '/check/x' example
-----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。 




0 0