1 Sed操作参数

1.1 q

参数q表示跳离sed

[address1]q
  • sed执行跳离动作的时候,会停止输入pattern space数据,同时停止数据送到标准输出文件。

例1

对于文件执行script_file内的编辑指令,除非遇到“Linux”字符串

  • 无论script_file内是何种指令,使用者只要在命令行上用指令“/Linux/q”,参数q会强迫sed遇到“Linux”时做跳离动作。
sed -e '/Linux/q' -f script_file input.dat

1.2 =

参数=表示印出资料的行数

[address1,address2]]=

# 显示行号和内容
sed -e '=' input.dat

# 文件内容是
The UNIX
Operating System

# 输出内容是
1
The UNIX
2
Operating System

1.3 #

#用于表示注释

1.4 N

N 表示添加下一条数据在pattern space内,sed在执行时,将下一行数据读入并添加在pattern space内,数据间的换行使用\n表示。使用N相当于每两行进行处理依次,依次向下进行。
n 表示读入下一行,覆盖前一行。

[address1,address2]]N

# 文件内容
The Unix 
Operating System

#执行
sed -e 'N' -e's/\n/ /' input.dat

# result
The Unix Operating System

1.5 D

参数D表示删除pattern space中第一行数据

[address1,[address2]]D
  • pattern space中只有一行数据的时候,D与d的功能是相同的。
  • 当pattern space内有多行数据的时候,D只删除第一行,d则全部删除
  • D表示执行删除后,pattern space内不添加下一行数据,将剩下的数据重新执行sed script;
  • d则是读入下一行后执行sed script

1.6 P

参数P表示打印出pattern space内第一行资料。

[address1,[address2]]P

例1

输出input.dat文件内奇数行资料。假设input.dat文档如下:

The 
Unix
System

# 执行下列命令
sed -e 'N' -e 'P' input.dat

#result
The 
System

1.7 h

参数h表示暂存pattern space的资料至hold space

[address1,address2]]h
  • sed执行暂存动作时,会覆盖掉hold space内原来的数据。当sed全部执行结束时,hold space内数据会自动清除。

1.8 H

H与h区别是,sed执行h的时候,数据覆盖掉hold space内原来的内容,H会添加hold space原来的数据之后。
H h都是向hold space中添加数据。

1.9 g

参数g表示将hold space内的资料放回pattern space内。

[address1,[address2]g
* g会覆盖pattern space中的原有的数据

1.10 G

G与g都是将hold space中的数据放回pattern space,G是在原有的pattern space原有的数据之后。

1.11 X

参数x表示交换pattern space和hold space中的内容

[address1,[address2]]x
sed -e '1h' -e '3x' input.dat
# 1h--将第一行内容放入hold space
# 3x--当第三行数据出现在pattern space的时候,使用hold space中的数据替换第三行数据
# 也就是用第一行替换第三行

1.12 b、:lable

在sed_script中

.
.
.
编辑命令m1
:记号
编辑命令m2
.
.
.
# 参数与b,在script_file内配合的情况
[address1.[address2]]b[记号]
  • 当sed执行至指令[address1,[address2]]b[记号]时,如果pattern space中的数据复合地址参数,则sed将下一个执行的branch至:记号设定的标记处。也就是由m2......进行执行编辑。
  • b后面没有记号的时候,则sed将下一个执行的指令branch到script_file的最后。

例1

将input.dat文件内数据行的开头字母重复打印40次,假设input.dat文档中的内容如下:

A
B
C
sed -e '{
:pl                         #:pl与b pl组成了一个循环
/A/s/A/AA/
/B/s/B/BB/
/C/s/C/CC/
/[ABC]\{40\}/b             # /[ABC]\{40\}/b  表示循环终止条件
b pl
}' input.dat