linux的sed命令是什么,linux sed命令

linux sed命令

简介:

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern

space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有

改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

补充:提取某一行中的内容而用sed 匹配时,一定要先匹配到那一行后然后用后向引用把那一行中的所去的内容用反向引用 \1 或者 & **把它提取出来

用法:

sed [option]…    ' script '    inputfile…

常用选项:

-n:不输出模式空间内容的自动打印

-e: 多点编辑

-f/PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本

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

-i: 原处编辑

script:

'  地址命令  '

地址定界:

(1) 不给地址:对全文进行处理

(2) 单地址:

#: 指定的行

/pattern/:被此处模式所能够匹配到的每一行

(3) 地址范围:

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4) ~:步进

1~2 奇数行(显示奇数行)

2~2 偶数行(显示偶数行)

记住:单引号' ' 里面的是地址命令,要加地址范围 / /才能匹配

编辑命令:

d:   删除模式空间匹配的行**p:   显示模式空间中的内容**a \text: 在行后面追加文本;支持使用\n实现多行追加**i \text: 在行前面插入文本;支持使用\n实现多行插入**c \text: 替换行为单行或多行文本**w /path/to/somefile:    保存模式匹配的行至指定文件**r /path/from/somefile:  读取指定文件的文本至模式空间中匹配到的行后**=:   为模式空间中的行打印行号**!:   模式空间中匹配行取反处理**

s///:查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

如果不加 就说明只  替换每行的第一个匹配到的内容

g: 行内全局替换

p: 显示替换成功的行

w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

其中&表示 /1/&/ 这里的&就是1的内容

在aaa后面添加字段:sed -ne 's/aaa/HELLO&/p' test

输出结果:HELLOaaa

在前后同时添加:sed -ne 's/aaa/&HELLO&/p' test

输出结果:aaaHELLOaaa

以行为单位的新增/删除

这种只是行内操作

练习

1、将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!

[root@www ~]# nl /etc/passwd | sed '2,5d'

1 root:x:0:0:root:/root:/bin/bash

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

2、仅列出 /etc/passwd 文件内的第 5-7 行

[root@www ~]# nl /etc/passwd | sed -n '5,7p'

5 lop:x:4:7:lop:/var/spool/lopd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

3、多点编辑:一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为sheller

nl /etc/passwd | sed -e '3,$d' -e 's/bash/sheller/'

1  root:x:0:0:root:/root:/bin/sheller

2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

4、从某行到某行的打印

sed -n '/^root/,/^s/p' /etc/passwd

*后向引用的用法,匹配等用法:

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符

[root@qzx tmp]# sed 's@^[[:space:]]+@@' /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@qzx tmp]# sed  's@^#[[:space:]]\+@@' /etc/fstab

3、在/root/install.log每一行行首增加#号

#Installing ipw2200-firmware-3.1-4.el6.noarch

#Installing rootfiles-8.1-6.1.el6.noarch

#Installing man-pages-3.22-20.el6.noarch

#Installing words-3.0-17.el6.noarch

#*** FINISHED INSTALLING PACKAGES ***[root@qzx tmp]# ^C

[root@qzx tmp]# sed 's$^$#$' /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号

[root@qzx tmp]# sed  's@^#[[:space:]]\+@@' /etc/fstab

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

基名:

[root@qzx tmp]# echo /etc/init/rc.conf/ | sed -r 's@.*/([^/]+/?$)@\1@'

rc.conf/

[root@qzx tmp]# echo /etc/init/rc.conf | sed -r 's@.*/([^/]+/?$)@\1@'

rc.conf

路径名:

[root@qzx tmp]# echo /etc/init/rc.conf | sed -r 's@(.*/)[^/]+/?$@\1@'

/etc/init/

6、利用sed 取出ifconfig命令中本机的IPv4地址

[root@qzx tmp]# ifconfig |sed -n '2p' |sed -r 's@.*addr:(.*)B.*@\1@'

10.1.253.75

7、统计centos安装光盘中Package目录下的所有rpm文件的

以.分隔倒数第二个字段的重复次数

[root@qzx Packages]# ls *.rpm  |sed -r 's#.*\.(.*)\.rpm#\1#'|sort |uniq -c

4 i686

919 noarch

2283 x86_64

其他高级编辑命令:

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:追加匹配到的行的下一行至模式空间

d: 删除模式空间中的行

D:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

3c8ce6380daa33c267ccb0e2e66a02de.png

保持空间,一次处理不完保存的地方

实例

sed -n 'n;p' FILE

打印偶数行

sed '1!G;h;$!d' FILE

倒序排列行 想到于 tac

sed '$!N;$!D' FILE

保留后两行

sed '$!d' FILE

只保留最后一行

sed ‘G’ FILE

加空行

sed ‘g’ FILE

显示10个空行

sed ‘/^$/d;G’ FILE

删除多余的空行,并在每行后加一个空行

sed 'n;d' FILE

[root@qzx ~]# sed 'n;d' qzx.txt

1

3

5

7

9

sed -n '1!G;h;$p' FILE

[root@qzx ~]# sed -n '1!G;h;$p' qzx.txt

10

9

8

7

6

4

5

3

2

1

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/32322

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太坊智能合约开发环境配置

转载于:https://www.cnblogs.com/preminem/p/7403669.html

Cisco ××× 完全配置指南-连载-SSL ×××

Cisco 完全配置指南-连载-SSL 详细内容见附件转载于:https://blog.51cto.com/xuanbo/149721

012.Adding a New Field --【添加一个新字段】

索引: 目录索引 Adding a New Field 添加一个新字段 2016-10-14 3 分钟阅读时长 作者 By Rick Anderson In this section youll use Entity Framework Code First Migrations to add a new field to the model and migrate that change to the database. 在本节,我…

system.gc()和system.runFinalization()区别作用

system.gc()和system.runFinalization()区别作用: System.gc(); //告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的 System.runFinalization(); //强制调用已经失去引用的对象的finalize方法

Linux中xml导入数据库,XML数据库 BaseX

BaseX 是一个XML数据库,用来存储紧缩的XML数据,提供了高效的 XPath 和 XQuery 的实现,还包括一个前端操作界面。BaseX是一个非常轻巧和高性能的XML数据库系统和XPath/XQuery处理。包含了对W3C Update和Full Text扩展的全面支持。一个可交互和…

redhat Enterprise 5下安装中文输入法,

redhat Enterprise 5下安装中文输入法,这实际上次解决VMware 6.5下不能正确显示中文的第二部分吧,还是以前的老问题,VMware6.5下安装redhat Enterprise linux5 过程中完全是自动安装,没有选项,装完之后是中文版&#x…

linux教程opensuse,OpenSUSE/Linux 网络配置

因工作需要,接触到了一台OpenSUSE系统的Linu服务器,开始以为和CentOS一样只需要配置一个ifcfg-ethx文件即可,但是配置后却发现根本没有网络,遂去查询相关资料,OpenSUSE系统的网络设置如下:一、修改ifcfg-et…

C++学习点滴

最近加入一个C的学习群,群里免不了有些网友提问题。我也正好学习一下。把一些问题,一些小程序记录下来,让自己的C水平慢慢提上来...... 函数功能: 把输入的字符串中的标点符号去掉之后输出来,循环执行 如果输入的字符串…

Flume协作框架

Flume协作框架 1.概述   -》flume的三大功能    collecting, aggregating, and moving       收集 聚合 移动 2.框图 3.架构特点  -》on streaming data flows    基于流式的数据    数据流:job-》不断获取数据    任务流:job…

【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用

实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl(input clk_25m,input rst_n,output fpga_ledg ); //--------------------clk_10hz---…

如何通过编程方式添加Native Client服务器别名

之前我有一篇博客讲到了Native Client中添加服务器别名的问题。请参考下面的链接(讨论服务器别名的内容在该链接文章的底部) http://www.cnblogs.com/chenxizhang/archive/2009/04/23/1441913.html 我当时是想直接改注册表的方式。这种方式当然肯定是可…

《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇

前言 借着看这本书的机会,好好系统学习一下C#3.0和.net3.5。C#3.0是一门面向对象的编程语言,具有多用途和类型安全等特征。为实现开发和学习的高效性,她在语言的简单,易表达,以及可编程性上做了很大努力。使得新人能够…

linux github中文官网,GitHub使用简介

GitHub使用简介1. 关于GitHub的常见使用方法,请参考官网上面的说明。本篇文档只是针对于常用的,而且容易犯错的用法进行说明。仅仅是个人观点。2. 如何使用GitHub?(1) 常用的是首先在GitHub上创建一个版本库,然后接下来的工作是在…