[root@sishen ~]# vim script.sed

#!/bin/sed -f

#交换第一列和第二列

s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g

#把整行内容放入<>中

s/^.*/<&>/

#把Developer替换为IT Manager

s/Developer/IT Manager/

#把Manager替换为DIrectory

s/Manager/Directory/

添加可执行权限

[root@sishen ~]# chmod u+x script.sed

[root@sishen ~]# ./script.sed employee.txt

<John Doe,101, CEO>

<Jason Smith,102, IT Directory>

<Raj Reddy,103, Sysadmin>

<Anand Ram,104, IT Directory>

<Jane Miller,105, Sales Directory>

<Jane Miller,#106, Sales Directory>

<Jane Miller,#107, Sales Directory>

使用-n屏蔽默认输出

[root@sishen ~]# vim sc.sed

#!/bin/sed -nf

/root/ p

/nobody/ p

/mail/ p

[root@sishen ~]# chmod +x sc.sed

[root@sishen ~]# ./sc.sed /etc/passwd

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

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

下面来测试下是否加-n,结果会如何

[root@sishen ~]# ./sc.sed /etc/passwd

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

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

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

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

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

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

………………

[root@sishen ~]# vim sc.sed

#!/bin/sed -fn

/root/ p

/nobody/ p

/mail/ p

[root@sishen ~]# ./sc.sed /etc/passwd

/bin/sed: couldn't open file n: No such file or directory

-nf一定不能写反

注意:无论参数有多少个,参数顺序如何,参数f后面必须接文件名

直接修改输入文件

前面提到sed默认不会修改输入文件,它只会把输出打印到标准输出上,当想保存结果时,把输出重定向到文件(或使用w命令)

[root@sishen ~]# cp employee.txt employee1.txt #先备份一下

[root@sishen ~]# sed 's/John/Johnny/' employee.txt > new-employee.txt

[root@sishen ~]# mv new-employee.txt employee.txt

mv: overwrite `employee.txt'? y

使用-i选项可以直接修改输入文件

[root@sishen ~]# sed -i 's/John/Johnny/' employee.txt

[root@sishen ~]# cat employee.txt

101,Johnnyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

再次提醒:-i会修改输入文件。或许这正是你想要的,但是务必小心。一个保护性的措施是在-i后面加上备份拓展,这一sed就会在修改原始文件之前备份一份

[root@sishen ~]# sed -ibak 's/John/Johnny/' employee.txt

[root@sishen ~]# ls | grep ^em

employee.txt

employee.txtbak

注意:-i后面可以接任意一个字符串或数字并非一定要是bak

还有另外一种写法效果一样

把sed当作命令解释器使用的更多相关文章

  1. 【转】sed单行命令大全

    文本间隔:  # 在每一行后面增加一空行  sed G # 将原来的所有空行删除并在每一行后面增加一空行.  # 这样在输出的文本中每一行后面将有且只有一空行.  sed '/^$/d;G' # 在每 ...

  2. sed替换命令

    sed替换命令 语法为: sed ' [ address-range | pattern-range ] s/original-string/replacement-string/[substitut ...

  3. linux:sed高级命令之n、N(转)

    sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...

  4. sed附加命令

    追加命令(命令a) sed '[address] a the-line-to-append' input-file 在第二行后面追加一行(原文这里可能有问题,没有写名行号) [root@sishen ...

  5. sed 常用命令 网址

    https://wangchujiang.com/linux-command/c/sed.html https://linux.cn/article-11367-1.html https://juej ...

  6. sed扩展命令使用

    [root@b ~]# cat f.txt inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0[root@b ~]# cat ...

  7. sed 替换命令使用

    输入文件不会被修改,sed 只在模式空间中执行替换命令,然后输出模式空间的内容.文本文件 employee.txt 101,John Doe,CEO 102,Jason Smith,IT Manage ...

  8. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  9. Tinyshell: 一个简易的shell命令解释器

    这是自己最近学习Linux系统编程之后写的一个练手的小程序,能很好地复习系统编程中的进程管理.信号.管道.文件等内容. 通过回顾写的过程中遇到的问题的形式记录程序的关键点,最后给出完整程序代码. 0. ...

随机推荐

  1. Deepin-文件目录介绍

    请参见这篇文件:来自一个强大的网站 我主要介绍的就是: 下面所列文件,全部添加进了path目录(Linux查找命令,请参见man.linux,无论是find 或者是 which等) Deepin默认可 ...

  2. HDU4763 Theme Section 【KMP】

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  3. hduoj2094产生冠军

     产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. 百度接口通过ip获取用户所在地

    /** * 百度接口      * 通过用户ip获取用户所在地      * @param userIp      * @return      */ public static String get ...

  5. mysql16---读写分离

    读写分离(负载平衡)(读写分离肯定要用到主从复制) 如果数据库压力很大,一台机器支撑不了,那么可以用mysql复制实现多台机器同步,将数据库的压力分散. 分表不能解决并发量大的问题. Sql语句发过来 ...

  6. eclipse 重启/打开内置浏览器

    重启 Eclipse 重启选项允许用户重启 Eclipse. 我们可以通过点击 File 菜单选择 Restart 菜单项来重启 Eclipse. Eclipse 内置浏览器 Web 浏览器 Ecli ...

  7. bzoj2323: [ZJOI2011]细胞

    这题真神... 首先看到这么花里胡哨的题面眉头一皱就发现这个球的大小是搞笑的不然就没法做了,有用的是最终拆出来的长度 然后对于一段长度为n有n-1个丝状物的东西,写一个DP:f[i][2]表示枚举到第 ...

  8. 【转】Android性能优化-过度绘制解决方案

    转载请注明出处:http://blog.csdn.net/a740169405/article/details/53896497 过度绘制: 屏幕上某一像素点在一帧中被重复绘制多次,就是过度绘制. 下 ...

  9. BZOJ_2947_[Poi2000]促销_堆

    BZOJ_2947_[Poi2000]促销_堆 Description Bytelandish连锁超市委托你编写一个程序来模拟一项即将施行的促销活动,该活动的规则如下: ●想要参与的顾客,只需把他的个 ...

  10. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...