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

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#/#-#sed 用法。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次就完了对文本的修改。
那使得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表示只替换钦点第几处出现的职位。暗中认可是第3次。
  • 援救正则表明式
  • 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,见上面

假定应用了寻址范围,那么会将钦赐范围作为叁个完整举办交换,而不是对每一行都进行轮换。例如

sed '2,3c\cccccc' datafile

小心如若寻址范围不可能匹配,那么要专注了,例如

sed '1,30000c\cccc' data7 

要是data7没有那样多行,那输出将是空,而且也不报错!
那是因为门道12分到第三行的时候,替换开关开了,可是匹配不到结尾一行,替换开关关闭持续,所以输出正是空了!

4.5 转换命令y

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

y/inchars/outchars/

更换命令会进展inchars和outchars值的一对一映射。倘使他们的长度不均等,则sed编辑器会报错,例子:

sed 'y/123456789/abcdefghi/' data8

转换命令是二个大局命令,不用考虑字符出现的任务和次数

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命令删除第1行并围绕到剧本的起首处。
假若你回到了剧本的前奏处,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. 其余待补充

相关文章