sed 用法

By admin in 美高梅手机版4858 on 2019年3月29日

sed 用法

sed 用法,sed

sed 用法


1,替换符号:

sed -e 's#/#-#g' -e's#:#-#g' passwd

sed 用法

1,替换符号:

sed -e 's#/#-#g' -e's#:#-#g' passwd

实用技巧放前面

2,使用sed文件输入指令:

vim 123.sed
s#:#/#g
s#/#-#g

sed -f 123.sed passwd

1,替换符号:

sed -e 's#/#-#g' -e's#:#-#g' passwd

2,使用sed文件输入指令:

vim 123.sed
s#:#/#g
s#/#-#g

sed -f 123.sed passwd

1. 加倍行间距:

sed 'G' datafile  #因为默认的保持空间内容为空。G的作用是将保持空间的内容附加到每一行的后面。
sed '$!G' datafile #最后一行不附加空白行。

sed '/^$/d;$!G' #不对空白行进行附加操作:先删除空白行,再加上空白行。

3,打印:

sed -n 2p passwd

2,使用sed文件输入指令:

vim 123.sed
s#:#/#g
s#/#-#g

sed -f 123.sed passwd

3,打印:

sed -n 2p passwd

2. 给文件中的行编号:

sed '=' data2 | sed 'N;s/\n/ /' #默认的行号会在行的上一行显示,经过2次处理,它们可以在同一行显示了

4,替换第n次匹配:

sed 's/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

专注:在每一行内第二次匹配到in,才会交替成AAAAA

3,打印:

sed -n 2p passwd

4,替换第n次匹配:

sed 's/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

留意:在每一行内第③回匹配到in,才会交替成AAAAA

3. 展现文件的末尾xx行:

sed '{
:start
$q
N
11,$D
b start
}' /etc/passwd

5,替换第n行的第m次匹配:

sed '2s/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

专注:能够动用-n -p 组合

sed -n '2s/in/AAAAA/2p' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

sed -n '2,3s/in/AAAAA/2p' passwd

bin:x:1:1:bAAAAA:/bAAAAA:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

sed -n '2,$s/in/AAAAA/2p' passwd

注意:能够使用$表示到最终

4,替换第n次匹配:

sed 's/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

小心:在每一行内第二遍匹配到in,才会交替成AAAAA

5,替换第n行的第m次匹配:

sed '2s/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

瞩目:能够动用-n -p 组合

sed -n '2s/in/AAAAA/2p' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

sed -n '2,3s/in/AAAAA/2p' passwd

bin:x:1:1:bAAAAA:/bAAAAA:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

sed -n '2,$s/in/AAAAA/2p' passwd

只顾:能够使用$表示到结尾

4. 刨除接二连三的空白行

sed '/./,/^$/!d' atest  #有一个bug,第一个数据行之前的单个空白行也会被删除。

6,将替换结果保存到文件中:

sed -n '2s/in/AAAAA/2pw passwd.sed' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

cat passwd.sed 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

5,替换第n行的第m次匹配:

sed '2s/in/AAAAA/2' passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bAAAAA:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

专注:能够动用-n -p 组合

sed -n '2s/in/AAAAA/2p' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

sed -n '2,3s/in/AAAAA/2p' passwd

bin:x:1:1:bAAAAA:/bAAAAA:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbAAAAA/nologin

sed -n '2,$s/in/AAAAA/2p' passwd

注意:能够使用$表示到最终

6,将替换结果保存到文件中:

sed -n '2s/in/AAAAA/2pw passwd.sed' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

cat passwd.sed 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

sed 用法。5. 去除发轫的空白行:

sed '/./,$!d' atest 

7,将替换结果备份,并且修改源文件:

sed -i.bak '2s/in/AAAAA/2' passwd

cat -n  passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bAAAAA:/bin:/sbin/nologin

ls passwd*
passwd  passwd.bak

6,将替换结果保存到文件中:

sed -n '2s/in/AAAAA/2pw passwd.sed' passwd 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

cat passwd.sed 
bin:x:1:1:bAAAAA:/bin:/sbin/nologin

7,将替换结果备份,并且修改源文件:

sed -i.bak '2s/in/AAAAA/2' passwd

cat -n  passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bAAAAA:/bin:/sbin/nologin

ls passwd*
passwd  passwd.bak

6. 删减结尾的空白行:

sed '{
:start
/^\n*$/{$d;N;b start}
}' atest

8,条件过滤修改:

sed -n '/root/s/bin/AAAAA/p' passwd

root:x:0:0:root:/root:/AAAAA/bash
operator:x:11:0:operator:/root:/sAAAAA/nologin

9,sed多命令执行:

sed  '1{
s/root/ROOT/
s/bin/BIN/
}' passwd

ROOT:x:0:0:root:/root:/BIN/bash

sed -n -e '1s/root/ROOT/' -e '1s/bin/BIN/' -e 1p passwd

ROOT:x:0:0:root:/root:/BIN/bash

7,将替换结果备份,并且修改源文件:

sed -i.bak '2s/in/AAAAA/2' passwd

cat -n  passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bAAAAA:/bin:/sbin/nologin

ls passwd*
passwd  passwd.bak

8,条件过滤修改:

sed -n '/root/s/bin/AAAAA/p' passwd

root:x:0:0:root:/root:/AAAAA/bash
operator:x:11:0:operator:/root:/sAAAAA/nologin

9,sed多命令执行:

sed  '1{
s/root/ROOT/
s/bin/BIN/
}' passwd

ROOT:x:0:0:root:/root:/BIN/bash

sed -n -e '1s/root/ROOT/' -e '1s/bin/BIN/' -e 1p passwd

ROOT:x:0:0:root:/root:/BIN/bash

7. 删除HTML标签:

删除<…>标签:

sed 's/<[^>]*>//g' data9

删去空白行

sed 's/<[^>]*>//g;/^$/d' data9

8,条件过滤修改:

sed -n '/root/s/bin/AAAAA/p' passwd

root:x:0:0:root:/root:/AAAAA/bash
operator:x:11:0:operator:/root:/sAAAAA/nologin

9,sed多命令执行:

sed  '1{
s/root/ROOT/
s/bin/BIN/
}' passwd

ROOT:x:0:0:root:/root:/BIN/bash

sed -n -e '1s/root/ROOT/' -e '1s/bin/BIN/' -e 1p passwd

ROOT:x:0:0:root:/root:/BIN/bash

用法,sed sed 用法 1,替换符号: sed -e
‘s#/#-#g’ -e ‘s#:#-#g’ passwd 2,使用sed文件输入指令: vim 123
.seds#:#/ #gs#/#-#g sed -f 123 .sed passwd 3,打印:…

1. sed编辑器简介:

stream editor流编辑器。
sed编辑器每一次从输入值读取一行,用提供的编辑器命令匹配数据、按命令中内定的法门修改流中的数据,然后将转变的数据输出到STDOUT。
在流编辑器将兼具命令与一行数据开始展览匹配后,他会读取下一行数据并再次这几个历程。
在流编辑器处理完流中的全数数据行后,它就会结束。
是因为命令都以单排一行顺序处理的,sed编辑器必须2次就完毕对文件的改动。
美高梅手机版4858,那使得sed编辑器比交互式编辑器快很多,那样你就能相当的慢地成功对数据的自行修改了。
使用sed命令的格式如下:

sed options script file  
  • script就是要履行的命令脚本。例如 s/srcStr/dstStr/g(替换命令) 等
  • script能够行使;或\n隔绝,也得以是{}进行分组。

2. sed命令选项

options选项参数允许你改改sed命令的行为,包蕴上面列出的选项:

  • -e script : 能够频仍使用-e来内定八个语句。
  • -f
    file:将-e内定的脚本命令能够存放到文件中,然后利用-f钦赐脚本文件。同样利用;或\n分割的多个语句。
  • -n:不要为各类命令生成输出,等待print命令输出。
  • -i : 直接修改源文件,而不是出口到STDOUT。

3. sed命令不难的事例:

#将每行中的第一个test替换成big test
echo "This is a test" | sed 's/test/big test/'
#对文件的每行的数据操作,首先将第一个test替换成big test,然后把所有的is替换成was
sed -e 's/test/big test/;s/is/was/g' examplefile
#使用脚本文件的方式执行
sed -f scriptFile examplefile

4. script部分:

4.1 替换命令s

例子

s/srcStr/dstStr/[1,2,...,g]
  • 有g表示全数交替,没有g表示只替换钦赐第几处冒出的职责。私下认可是第三次。
  • 支撑正则表明式
  • p表示打印该行,平日和-n选项同时选择。
  • w表示将替换结果输出到钦点文件
  • 使用 \ 来转义特殊字符
  • 划分字符不必然肯定是/,也得以是此外字符,例如 s#srcStr#dstStr#g

4.2 删除命令d

例子:

sed '/number 1/d' data7 #删除包含 number 1的行

4.3 追加命令a\和插入命令i\

在钦命行的 下一行/上一行 增添一个新行。例子:

sed 'i\Test Line 1' examplefile #在每一行的上一行插入一行

经测试,i或a前面不肯定使用\,不过其前面的空格会失效,所以,依旧老实点使用正式格式i\
倘若利用了寻址范围,那么钦定范围内的每一行都会实施插入操作,而不是在总体范围的首尾处插入。
假定您要将新行附加到数据流的最后,只需求

sed '$a\This is a new Line of text' data7

叠加多行文件,须求动用频仍\(注意必须换行,而不是只利用这么些标记),例如

sed '1i\insert line1\
insert line2' datafile

要么利用 \n

sed '1i\insert line1\ninsert line2' datafile

测算:是不是是使用\只是为着转义,而不是必须的命令格式?

4.4 修改命令c\

将整行内容替换。例子

sed '3c\cccccc1' data7 #将第3行替换成 cccccc1

同一的,假设要将内容替换到多行内容,供给频仍用到(注意必须换行,而不是只使用那一个标记),例如

sed '3c\cccccc1\
ccccccc2' data7

抑或应用\n,同a或i,见上面

若果利用了寻址范围,那么会将钦点范围作为1个完好无损举行轮换,而不是对每一行都进展替换。例如

sed '2,3c\cccccc' datafile

留意借使寻址范围不能够合营,那么要专注了,例如

sed '1,30000c\cccc' data7 

假诺data7没有这么多行,那输出将是空,而且也不报错!
那是因为特出到第贰行的时候,替换开关开了,可是匹配不到最后一行,替换开关关闭持续,所以输出便是空了!

4.5 转换命令y

那是唯一能够拍卖单个字符的sed编辑器命令。
格式

y/inchars/outchars/

转移命令会议及展览开inchars和outchars值的一对一映射。倘诺他们的长短区别等,则sed编辑器会报错,例子:

sed 'y/123456789/abcdefghi/' data8

改换命令是1个大局命令,不用考虑字符出现的地方和次数

4.6 打字与印刷命令p

在内定行的上一行打字与印刷该行内容平时和-n选项同时选拔。

4.7 打字与印刷命令=

在钦赐行的上一行打字与印刷行号,平常和-n选项同时选用。

4.8 打字与印刷命令l

在钦点行的上一行打字与印刷该行内容,和p命令不相同的是其它不可打字与印刷字符都用它们的八进制值前加多个反斜线或标准C风格的命名法(用于大规模的不行打字与印刷字符),比如\t来代表制表符。,日常和-n选项同时选拔。

4.9 写入文件命令w filename

4.10 读文件命令r filename

在钦赐行的下一行读入文件内容。例子

sed '$r data12' data6 #在输出流末尾添加文件内容
sed '/LIST/{r data1
d
}' letter  #和删除命令一起使用,来用另一个文件中的数据替换文件中的占位文本

4.99 地址匹配格式

[address]command 或 [address] {cmd1;cmd2;...} 

寻址格局: 使用数字或文本情势来过滤出某行
选取数字艺术的事例

sed '2s/dog/cat/' data1 #替换第二行的数据
sed '2,4s/dog/cat/' data1 #替换[2,3,4]行的数据
sed '2,$s/dog/cat/' data1 #替换[2到最后一行]的数据

动用文本格局过滤的事例

sed '/Samantha/s/bash/csh/' /etc/passwd #匹配包含Samantha的行
sed '/1/,/3/d' data6 #匹配包含1的行 和 包含3的行 之间的行

高级教程

4.11 命令n

挪动到数码流中的下一行文本,而不用重新回到命令的最早先再进行叁回。
也便是说n命令会将数据流的下一行文本移动到sed编辑器的做事空间(称为情势空间)。例子:

sed '/header/{n ; d}' data1  #匹配包含header的行,然后移动到下一行,并执行d命令。

4.12 命令N

会将下一行文本追加到曾经在情势空间中的文本上。例子:

sed '/first/{N ; s/\n/ / }' data2  //匹配包含first的行,然后将下一行文本追加到模式空间,然后将\n替换为空格。

4.12 命令D

删除多行组中的一行,并恐吓sed编辑器再次来到到剧本的苗头处,并在一如既往格局空间重复执行那些命令(他不会从数额流中读取新的文本行)。例子:

sed 'N ; /System\nAdministrator/d' data4 //会将模式空间中的两行都删除
sed 'N ; /System\nAdministrator/D' data4 //只删除第一行

4.13 命令P

打字与印刷多行方式空间中的第2行。例子:

sed -n '{ N ; P ; D }' 

先是用N,将下一行添加到格局空间,然后利用P命令打字与印刷第贰行,
然后选择D命令删除第2行并围绕到剧本的初阶处。
假设您回来了剧本的开端处,N命令会读取下一行文本相提并论新开端那个进度。
以此循环会平昔继续下去直到数据流的末段。

4.14 模式空间命令h

将形式空间复制到保存空间

4.15 形式空间命令H

将方式空间附加到保险空间

4.16 情势空间命令g

将保证空间复制到情势空间

4.17 格局空间命令G

将保证空间附加到方式空间

4.18 排除命令!

让原先起效果的命令不起功能。例子:

sed -n '/header/!p' data2  #匹配header的行不打印

4.19 改变流

平时,sed编辑器会从剧本的顶部开端执行命令并平昔处理到剧本的末尾(D命令是个不一致,他会强制sed编辑器重临到剧本的顶部,而不读取新的行)。
sed编辑器提供了二个来改变命令脚本的流,生成的结果类似于结构化编制程序环境的结果。

4.20 改变流相关命令1: b命令

跳转到标记

b [label] 

(类似于goto) 例子:

sed '{2,3b ; s/This is/Is this/;s/line./test?/}' data2
#为第2行到第3行的数据流跳过后面的两个测试命令
#标签[label]的定义方式是使用 : 开头,最多7个字符,例子:
sed '{/header/b jump1;s/is/was/;:jump1 s/line/para/}' atest
#匹配包含header的行,直接跳转到标记jump1

4.21 改变流相关命令1: t命令

典故测试举行跳转

t [label] 

(类似于if) 例子:

sed '{s/header/first/;t;s/is/was/}' atest
#如果替换header为first成功,则跳转到命令结尾,否则不进行跳转

(1) 退出脚本命令q

4.22 方式代表符号1: &符号

代表替换命令中的匹配形式。例子:

echo "The cat sleeps in his hat." | sed 's/.at/"&"/g'
# &符号 代表匹配到的 cat 或 hat

4.23 形式代表符号2: \1、\2、…

意味着代表模式中匹配到的组,例子:

echo "The furry cat is pretty" | sed 's/furry \(.at\)/\1/' 
#匹配 furry cat,并替换为cat

专注,分组使用的()符号必须运用\转义。

5. 其余待补充

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有