sed附加命令

追加命令(命令a)

sed ‘[address] a the-line-to-append’ input-file

在第二行后面追加一行(原文这里可能有问题,没有写名行号)

[[email protected] ~]# sed ‘2 a 203,Jack Johnson,Engineer‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

在employee.txt文件结尾追加一行:

[[email protected] ~]# sed ‘$ a 106,Jack Johnny,Engineer‘ employee.txt

101,Johnnynynyny 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

106,Jack Johnny,Engineer

在匹配Jason的行后面追加两行

[[email protected] ~]# sed ‘/Jason/a\

> 203,Jack Johnson,Engineer\

> 204,Mark Smith,Slaes Engineer‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

204,Mark Smith,Slaes Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

追加多行之间可以用\n来换行,这样就不用折行了,上面的命令等价于:

[[email protected] ~]# sed ‘/Jason/a 203,Jack Johnson,Engineer\n204,Mark Smith,Slaes Engineer‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack Johnson,Engineer

204,Mark Smith,Slaes Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

修改命令(命令c)

sed ‘[address] c the-line-to-insert’ input-file

用新数据取代第2行

[[email protected] ~]# sed ‘2 c 202,Jack,Johnson,Engineer‘ employee1.txt

101,John Doe,CEO

202,Jack,Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

这里命令c等价于替换:sed ‘2s/.*/202,,Jack,Johnson,Engineer/’employee.txt

sed也可以用多行来取代一行

用两行数据取代匹配Raj的行

[[email protected] ~]# sed ‘/Raj/c \

> 203,Jack,Johnson,Engineer \

> 204,Mark Smith,Slaes Engineer‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

203,Jack,Johnson,Engineer

204,Mark Smith,Slaes Engineer

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

命令a、i、和c组合使用

l a在“Jason“后面追加”Jack Johnson“

l i在“Jason”前面插入”Mark Smith“

l c用“Joe Mason“代替”Jason“

[[email protected] ~]# sed ‘/Jason/ {

a\

204,Jack Johnson,Engineer

i\

202,Mark Smith,Slaes Engineer

c\

203,Joe Mason,Sysadmin

}‘ employee.txt

101,Johnnynynyny Doe,CEO

202,Mark Smith,Slaes Engineer

203,Joe Mason,Sysadmin

204,Jack Johnson,Engineer

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

打印不可见字符(命令l)

首先建立测试文件

[[email protected] ~]# vim tab.txt

fname First Name

lname Last Name

Mname Middle Name

[[email protected] ~]# sed -n ‘l‘ tab.txt

fname First Name$

lname Last Name$

Mname Middle Name$

$

如果在l后面指定了数字,那么会在第N个字符处使用一个不可见自动折行

[[email protected] ~]# sed -n ‘l 20‘ employee.txt

101,Johnnynynyny Do\

e,CEO$

102,Jason Smith,IT \

Manager$

103,Raj Reddy,Sysad\

min$

104,Anand Ram,Devel\

oper$

105,Jane Miller,Sal\

es Manager$

#106,Jane Miller,Sa\

les Manager$

#107,Jane Miller,Sa\

les Manager$

这个功能只有GNU sed才有

打印行号(命令=)

打印所有行的行号

[[email protected] ~]# sed ‘=‘ employee.txt

1

101,Johnnynynyny Doe,CEO

2

102,Jason Smith,IT Manager

3

103,Raj Reddy,Sysadmin

4

104,Anand Ram,Developer

5

105,Jane Miller,Sales Manager

6

#106,Jane Miller,Sales Manager

7

#107,Jane Miller,Sales Manager

提示:把命令=和命令N配合使用,可以把行号和内容显示在同一行上

只打印1,2,3行的行号

[[email protected] ~]# sed ‘1,3=‘ employee.txt

1

101,Johnnynynyny Doe,CEO

2

102,Jason Smith,IT Manager

3

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

#106,Jane Miller,Sales Manager

#107,Jane Miller,Sales Manager

打印包含关键字“Jane“的行哈,同时打印输入文件中的内容:

[[email protected] ~]# sed ‘/Jane/=‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

5

105,Jane Miller,Sales Manager

6

#106,Jane Miller,Sales Manager

7

#107,Jane Miller,Sales Manager

如果你想只是显示行号但不显示行的内容,那么使用-n选项来配合命令=:

[[email protected] ~]# sed -n ‘/Raj/=‘ employee.txt

3

打印文件的总行数

[[email protected] ~]# sed -n ‘$=‘ employee.txt

7

转换字符(命令y)

命令y根据对应位置转换字符,好处之一便是把大写字符转换为小写,反之亦然

如下例子

[[email protected] ~]# sed ‘y/abcde/ABCDE/‘ employee.txt

101,Johnnynynyny 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

把所有的小写字母转换为大写

[[email protected] ~]# sed ‘y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/‘ employee.txt

101,JOHNNYNYNYNY 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

操作多个文件

在/etc/passwd中搜索root并打印出来

[[email protected] ~]# sed -n ‘/root/ p‘ /etc/passwd

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

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

在/etc/group中搜索root并打印出来

[[email protected] ~]# sed -n ‘/root/ p‘ /etc/group

root:x:0:

同时在/etc/passwd和/etc/group中搜索root

[[email protected] ~]# sed -n ‘/root/ p‘ /etc/passwd /etc/group

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

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

root:x:0:

退出sed (命令q)

当sed遇到命令q,便立刻退出,当前循环中的后续命令不会被执行,也不会继续循环

打印第一行后退出

[[email protected] ~]# sed ‘1 q ‘ employee.txt

101,Johnnynynyny Doe,CEO

打印5行后退出

[[email protected] ~]# sed ‘5 q ‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

打印所有行直到遇到包含关键字Manager的行

[[email protected] ~]# sed ‘/Manager/ q‘ employee.txt

101,Johnnynynyny Doe,CEO

102,Jason Smith,IT Manager

注意:q命令不能指定地址范围(或模式范围),只能用于单个文件(或单个模式)

从文件中读取数据(命令r)

[[email protected] ~]# sed ‘$ r log.txt‘ employee.txt

101,Johnnynynyny 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

log: input.txt

log:

log: testing resumed

log:

log:output created

[[email protected] ~]# sed ‘ /Raj/ r ../sed8awk/log.txt‘ employee.txt

101,Johnnynynyny 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

时间: 2024-11-04 10:21:33

sed附加命令的相关文章

sed 'N' 命令

我的理解是读取第一行并且以new line character \n为分割符 附加到第一行, 之后在处理第二行(最开始的第三行). http://www.thegeekstuff.com/2009/11/unix-sed-tutorial-multi-line-file-operation-with-6-practical-examples/#comments 这篇文章写得特别好. The curly braces "{" and "}" used to group

find/pg/grep/sed/awk命令

find pathname -options [-print -exec -ok ...] -print: find命令将匹配的文件输出到标准输出. 当前目录下查找文件权限位为 7 5 5的文件 $ find . -perm 755 -print 当前目录及子目录中查找文件名以一个大写字母开头的文件 $ find . -name "[A-Z]*" 希望在系统根目录下查找更改时间在 5日以内的文件 $ find / -mtime -5 -print 为了在/var/adm目录下查找更改时

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

sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,知道脚本执行完毕.然后该行呗输出,模式(pattern space)被清空:接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕. 但是,由于种种原因,如用户希望在某个条件下,脚本中的某个命令被执行或希望模式空间(pattern spac

sed高级命令小记

sed高级命令: g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖 G:将hold space中的内容append到pattern space\n后 h: 将pattern space中的内容拷贝到hold space中,原来hold space里的内容被覆盖 H: 将pattern space中的内容append到hold space\n后 d: 删除pattern中的所有行,并读入下一新行到pattern中 [[email 

sed -i命令详解 转

sed -i命令详解 [[email protected] ~]# sed [-nefr] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e :直接在命令列模式上进行 sed 的动作编辑: -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作: -

sed常用命令

-n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e :直接在命令列模式上进行 sed 的动作编辑: -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作: -r :sed 的动作支持的是延伸型正规表示法的语法.(默认是基础正规表示法语法) -i :直接修改读取的文件内容,而

Mac 下如何使用sed -i命令

今天在学习Linux的过程中发现了sed这一项指令 首先,sed的全称是:Stream Editor 调用sed命令有两种形式: sed [options] 'command' file(s) sed [options] -f scriptfile file(s) 今天就主要说一下sed命令里面-i这个参数的用法 -i 是指在当前文本进行更改 具体内容可以在Linux中使用 man sed 进行查看 但是如果是下面的代码,会报错,不能实现我想要的功能 sed -i '2,4d' example.

sed高级命令

所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行模式空间(N.D.P). 2)采用保持空间来保存模式空间的内容并使他们可用于后续的命令(H.h.G.g.x). 3)编写使用分支和条件指令的脚本来更改控制流(:.b.t). 1.N命令:追加下一行 多行Next(N)命令通过读取当前行的下一行,并把两行拼成一行来进行接下来的处理. [email pr

记忆sed的命令

sed 是一个很重要的脚本命令 替换文件内的字 sed -i "s/xxx/ooo/" 文件目录 三个/不能忘了 sed -i "s/文件中要被替换的字/替换进入文件的字/" 文件目录的路径(绝对路径) 举例:替换selinux文件里的enforcing,改成disabled sed -i "s/enforcing/disabled/" /etc/selinux/config 下次再写了,今天看到这里.