[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. 纯C语言实现简单封装继承机制

    0 继承是OO设计的基础 继承是OO设计中的基本部分,也是实现多态的基础,C++,C#,Objective-C.Java.PHP.JavaScript等为OO而设计的语言,其语言本身对实现继承提供了直 ...

  2. python实现接口自动化

    一.总述 Postman:功能强大,界面好看响应格式自主选择,缺点支持的协议单一且不能数据分离,比较麻烦的还有不是所有的公司都能上谷歌SoupUI:支持多协议(http\soup\rest等),能实现 ...

  3. c++学习笔记之基础---类内声明线程函数的调用

    近日需要将线程池封装成C++类,类名为Threadpool.在类的成员函数exec_task中调用pthread_create去启动线程执行例程thread_rounter.编译之后报错如下: spf ...

  4. QT学习笔记(一)——ui的认识

    ////////////2015/08/06/////////////////// ///////////by xbw////////////////////////// //////////环境 Q ...

  5. MongoDB数据库的初识

    1,MongoDB是基于分布式文件存储的数据库,有c++语言编写,旨在为WEB应用提供可扩展的高效性能数据存储解决方案. MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系数据库当 ...

  6. zTree 基本用法

    [简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 ...

  7. 使用css属性line-height实现文字垂直居中的问题

    使用css属性line-height实现文字垂直居中的问题 1.使用css属性line-height实现文字垂直居中 方法比较简单,但是只能实现单行文字的垂直居中. 单行垂直居中效果如下:   要是p ...

  8. XML简单介绍及举例

    可扩展标记语言(eXtensibleMarkup Language,简称XML).是一种标记语言.标记指计算机所能理解的信息符号.通过此种标记,计算机之间能够处理包括各种信息的文章等. 怎样定义这些标 ...

  9. js权威指南

    有很多js的细节基础不太了解,希望能通过阅读这本书查漏补缺!长期更新!

  10. ABAP doi 导出程序

    PERFORM FRM_OUTPUT_EXCEL_38 TABLES GT_RESULT USING 'ZHRPA038' LDF_PATH . FORM FRM_OUTPUT_EXCEL_38 TA ...