博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux命令之sed
阅读量:4933 次
发布时间:2019-06-11

本文共 4068 字,大约阅读时间需要 13 分钟。

sed简介

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space) 接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。 文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed语法格式

sed    语法格式    sed  [选项]  '编辑指令' 文件            [定址符]处理动作                [地址1[,地址2]]        # sed -n '2,4p' /etc/passwd    -n取消默认输出    bin:x:1:1:bin:/bin:/sbin/nologin    daemon:x:2:2:daemon:/sbin:/sbin/nologin    adm:x:3:4:adm:/var/adm:/sbin/nologin

sed常见命令选项

-n    取消默认输出-i    直接修改文件内容-f    使用sed脚本-e    可指定多个处理动作(较少)-r    启用扩展正则,若与其他选项一起使用,应作为首选项 #echo gtms >test #sed -r 's#(.*)#i am \1#g' test     	i am gtms {}    组合多个命令,分号分隔定址符,即[地址1[,地址2]]    用来指定处理的起、止行数。省略时,默认全部行    地址可表示为文本的“行号”,或者 “/正则表达式/”进行匹配

 

sed处理动作

p  打印行  2,4p  2p;4p  分号 d  删除行  2,4d s字符串替换  s/old/new/替换每行的第一个  s/old/new/3替换每行的第三个  s/old/new/g替换所有    替换分隔符“/”可使用如#,&等,便于修改文件路径

文本输出

sed -n 'p' passwd      输出所有行    sed -n '4p' passwd      输出第4行    sed -n '4,7p' passw      输出第4-7行             sed -n '4,+2p' passwd    输出第4行及其后2行    sed -n '/4/p' passwd     匹配有4的行    sed -n 'p;n' passwd     输出奇数行   n即读入下一行    sed -n 'n;p' passwd     输出偶数行    sed -n '2,${n;p}' passwd    输出第2行开始的奇数行    sed -n '2,${p;n}' passwd    输出第2行开始的偶数行    sed -n '$=' passwd      输出文件总行数   $= 文件行数

删除文本 -i真修改

sed '3d;5d' passwd         删除第3行,第5行    sed '3,5d' passwd          删除3-5行    sed '/root/d' passwd       删除包含root的行    sed '/^root/d' passwd      删除以root开头的行    sed '$d' passwd            删除最后1行    sed '/^$/d' passwd         删除空行    sed '/^$/n;{/^$/d}' passwd 出现连续两个空行,则删除一个空行

文本替换 -i真修改

sed 's#root#ROOT#' passwd      将每行中的第1个root替换成ROOT    sed 's#/root#ROOT#3' passwd     将每行中的第3个root替换成ROOT    sed 's#root#ROOT#g' passwd     将所有root替换成ROOT    sed 's#root##g' passwd         将所有root字串删除(置空)    sed 's#root#&s#g' passwd        将所有root后加s,&代表查找串    sed '4,7s/^/#/' passwd         将4-7行注释    sed 's/^#//' passwd            将以#开头的#去除

sed文本块处理动作 -i真修改

i    行前插入        2iYY        在第2行之前插入YY文本行        4,7iYY     在4-7行每行前插入文本行a    行后插入        2ayy        在第2行后插入YY行        /^XX/aYY    在以XX开头的行之后插入YY行c    替换当前行        2cYY        将第2行内容修改为YY多行文本处理        # sed  -i '1iXX\nYY' /tmp/passwd         # head -3 /tmppasswd         XX        YY        root:x:0:0:root:/root:/bin/bash         或# sed  -i '1iXX\(回车)        > YY' /tmp/passwd

 

案例

修改默认运行级别    # grep ^id /etc/inittab     id:3:initdefault:    #sed  '/^id/s#[0-6]#5#' /etc/inittab    # grep ^id /etc/inittab     id:5:initdefault:修改网站根目录:将/var/www/html修改为/opt/wwwroot    # grep "^DocumentRoot" /etc/httpd/conf/httpd.conf     DocumentRoot "/var/www/html"    # sed -i 's#/var/www/html#/opt/wwwroot#' /etc/httpd/conf/httpd.conf     # grep "^DocumentRoot" /etc/httpd/conf/httpd.conf     DocumentRoot "/opt/wwwroot" 更改主机名配置   # grep ^HOSTNAME /etc/sysconfig/network   HOSTNAME=node90   # sed -i '/^HOSTNAME/cHOSTNAME=linux server' /etc/sysconfig/network   # grep ^HOSTNAME /etc/sysconfig/network   HOSTNAME=linux server

 

 

sed复制剪切 -i真修改

模式空间        存放当前处理的行,将处理结果输出        若当前不符合处理条件,则鸳鸯输出        处理完当前行再读入下一行来处理    保持空间        作用类似于“剪贴板”        默认存放一个空行(换行符\n)    H    模式空间--追加-->保持空间      复制    h    模式空间--覆盖-->保持空间    复制    G    保持空间--追加-->模式空间    粘贴    g    保持空间--覆盖--->模式空间    粘贴    #sed '1,3H;$G' passwd         将第1到第3行复制到文件末尾    #sed '1h;2,3H;$G' passwd      同上。避免出现空行    #sed '1h;1d;$G' passwd        将第一行剪贴到文末尾    #sed '1h;2H;1,2d;$G' passwd   将第1第2行剪贴到文末

应用案例(ifconfig取ip)

#ifconfig eth0 | sed -n '2p'|sed 's#^.*dr:##g' | sed 's#  B.*$##g' (把ip前后都sed掉)#ifconfig eth0 | sed -n '2p'|sed -r 's#^.*dr:(.*)  Bc.*#\1#g'#ifconfig eth0 | sed -nr '2s#^.*dr:(.*)  Bc.*$#\1#gp'#ifconfig eth0 | awk -F"[: ]+" 'NR==2 {print $4}'#ifconfig | grep " inet addr" | head -1 | cut -d ":" -f2 | awk '{print $1}'#ifconfig eth0 | sed -n '2p' | sed 's#^.*dr:##g' | cut -d " " -f1

 

修改网站根目录:将/var/www/html修改为/opt/wwwroot

         # grep "^DocumentRoot" /etc/httpd/conf/httpd.conf

         DocumentRoot "/var/www/html"

         # sed -i 's#/var/www/html#/opt/wwwroot#' /etc/httpd/conf/httpd.conf

         # grep "^DocumentRoot" /etc/httpd/conf/httpd.conf

         DocumentRoot "/opt/wwwroot"

 

转载于:https://www.cnblogs.com/gtms/p/6649449.html

你可能感兴趣的文章
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
swing
查看>>
Continuous integration
查看>>
前端知识点总结
查看>>
github 在ubuntu 使用--常用命令
查看>>
hl7 V2中Message Control ID的含义及应用
查看>>
IOS 4个容易混淆的属性(textAligment contentVerticalAlignment contentHorizontalAlignment contentMode)...
查看>>
iOS 修改textholder的颜色
查看>>