水电工888 发表于 2017-7-9 06:28:45

Linux sed 简单操作

  一、sed简介

sed是一种在线的编译器,它一次处理一行内容,将内容存储在临时的缓冲区中,接着用sed命令处理缓冲区的内容,处理完后将缓冲区的内容送往屏幕。(默认不更改原文件内容,除非使用重定向存储输出)

二、sed使用参数

格式:# sed[-nefr][动作]
选项与参数:
-n :使用安静(silent)模式。取消默认原有输出,只显示特殊处理的内容。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: ]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!



############################sed练习##################################

sed练习案例
1、将/etc/passwd的内容以行号列出来,并将2-35行内容删除
# nl /etc/passwd | sed '2,35d'   
  注意:原文件内容并没有删除,只是显示的时候删除了2-35行内容


2、在第二行后面添加 "I am studing linux"[在第三行显示]
# nl /etc/passwd | sed '2a I am studing linux'
a(add)新增一行, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

注意:如果添加多行,则需要在命令的结尾打上\,然后按住ctrl+回车 换行输入


# nl /etc/passwd | sed '2a I am studing linux\
drink beer?'

3、以行单位替换显示:将2-35行的内容替换成“NO number 2-35”显示
# nl /etc/passwd | sed '2,35c NO number 2-35'
c (change),替换显示


4、寻找数据并显示   从/etc/passwd文件中查找出root,并只显示root所在行
# nl /etc/passwd | sed -n '/root/p'

5、数据搜索并执行命令

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

如果只替换第一个关键字就退出可在后面添加;q


6、数据搜索替换
格式:sed ‘s#XXX#MMM#g’ 文件
# sed -n 's#oldboy#network#gp' test.txt
  sed -r 's#(.*) cisco#\1#g' test.txt

-r 代表进行正则表达式批评
(.*) cisco 代表任意内容并以cisco结尾的关键字
\1 取出正则表达式中第一个()里面代表的内容

7.只查看wen.txt文件(100行)内的第20-30行

① sed -n '20,30p' wen.txt----最简单快捷的方式
  ②head -30 wen.txt|tail -11 ----效率最低,尽量不用


head -n 取出文件的前n行,默认是前10行,例如取前3行则是 head -3
tail -n 取出文件的后n 行,默认是后10行,例如取出后11行,则是 tail -11
【tail -f文件名 】可以跟踪文件尾部的变化,tail -f 可以简写为tailf
③awk '{if(NR>19&&NR<31) printf $1"\n"}' wen.txt
   awk '{if(NR>19&&NR<31) print $1}' wen.txt

  注意:如果采用关键字printf则默认情况下是没有换行的,必须在后面加“\n”,如果是采用print,则默认情况下是有换行,无需加“\n”
页: [1]
查看完整版本: Linux sed 简单操作