sed命令的基本语法
1. Sed命令的工作流程:
Sed命令对文本的搜索是一行一行进行。
2. Sed命令的基本语法格式
Man手册的语法描述:
NAME sed - stream editor for filtering and transforming text
SYNOPSIS sed [OPTION]... {script-only-if-no-other-script} [input- file]...
DESCRIPTION Sed is a stream editor. A stream editor is used to per- form basic text transformations on an input stream (a file or input from a pipeline). While in some ways sim- ilar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which partic- ularly distinguishes it from other types of editors.
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
p Print the current pattern space.
P Print up to the first embedded newline of the current pattern space. s /regexp/replacement/ Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
w filename Write the current pattern space to filename.
W filename Write the first line of the current pattern space to filename. This is a GNU extension.
|
A. sed 一般命令格式:
sed [options] {sed-commands} {input-file}
1) p 命令与-n 选项(print, --quiet –silent)
只打印第一行
$ sed -n'1 p' example.txt
打印1至3行
$sed-n '1,3 p' example.txt
选项中加上-n与没加-n的区别:命令对比 $ sed '1,3 p' example.txt
打印Jason 所在行
sed -n '/Jason/ p' example.txt
打印Jason 至Jane 所在的行
sed -n '/Jason/,/Jane/ p'example.txt
打印以103 开头的行
sed -n '/^103/ p' example.txt
打印以Manager 结尾的行
sed -n '/Manager$/ p' example.txt
以数字开头,而且是连续重复三次
sed -n '/^[0-9]\{3\}/ p'example.txt
每隔一行打印一次
sed -n '1~2 p' example.txt
2) d 命令(delete)
d命令与p命令基本用法一致
删除103 字符串所在的行
sed '/103/ d' example.txt
3) -f选项(-f 从文件中读入命令)
新建cmd.sed 命令文件,文件内容如下: /Jane/ p
在终端输入命令:sed -f cmd.sed example.txt
注意:可在以命令文件中写多个命令
4) -e 选项(执行多个命令)
打印Jason 和Jane 所在的行
形式一:sed -n -e '/John/ p' -e '/Jane/p' example.txt
形式二:sed -n -e '/John/ p;/Jane/ p'example.txt
B. 替换命令格式
sed'[address-range|pattern-range]s/originalstring/replacement-string/[substitute-flags]'inputfile
address-range:地址列表,表示从哪个地方开始执行,如:1,3 表示第一行
到第3 行。
pattern-range:样式列表,表示从哪个样式匹配串开始。如:/Jane/,表示
从行中包含字符串Jane 的行开始执行。[]中的都是可选的。
s:表示要执行替换命令(substitute)
originalstring:需要被替换的字符串
replacement-string:替换后的字符串。
substitute-flags:可选替换标志符。
1) address-range 和pattern-range
a) 把第一行的John 替换成guozi 字符串
sed '1 s/John/guozi/' example.txt
b) 把第二行至第五行的Manager 替换成guozi
sed '2,5 s/Manager/guozi/'example.txt
c) 把John 所以字符串行当中的CEO 替换成XXX
sed '/John/ s/CEO/XXX/'example.txt
d) 从第四行而且包含字符串Ram 的行中,把Developer 字符串替换成XXX
sed '4,/Ram/ s/Developer/XXX/'example.txt
e) 如果没有address-range 和pattern-range,那么就会把每一行碰到的第一
个匹配字符串给替换掉。
sed 's/1/AAA/' example.txt
2) substitute-flags
a) 全局标志g(globe)
全局标志会把遇到的所有满足条件的字符串给替换掉
sed 's/1/AAA/g' example.txt
b) 数字标志1,2,3
把要匹配串中的第2个符合条件的匹配串替换成我们想要的字符串
sed 's/1/AAA/2’ example.txt
c) 又见p(print)标志
sed -n 's/1/AAA/p' example.txt
d) 写标志w(write)
把每一行碰到第一个字符串John 替换成guozi 字符串,并写入
output.txt 中
sed 's/John/guozi/w output.txt'example.txt
对比重定向:
重定向会把所以输出到终端的内容全部放到文本当中,而w 开关只把
我们所做过修改的行写入文件当中。
sed 's/John/guozi/' example.txt >output.txt
e) 敏感标志i(ignore flag)
忽略大小写,把文本当中所有包含jason 字符串的行替换成AAAA 字符串
sed 's/jason/AAAA/gi' example.txt
f) 联合使用标志
可以使用多个标志来对字符串进行替换并保存
sed 's/jason/AAAA/gipwoutput2.txt' example.txt
3) 替换命令定界符
格式1:Sed ‘s///’ example.txt
格式2:Sed ‘s@@@’ example.txt
用处:使用合理的定界符可以方便的阅读我们的程序代码。
4) 强大的&——样式匹配
将origin-string替换到replace-string当中
sed 's/John/[&]/' example.txt
需求:将开头为三位数字的外面再加一层{}
形式一:sed 's/^[0-9]\{3\}/{&}/'example.txt
形式二:sed 's/^[0-9].*/{&}/'example.txt
C. 使用a 命令追加行
格式:sed '[address] a the-line-to-append' input-file
示例:
1) 在文本的第2行后追加一行
sed '2 a 203,Jack Johnson,Engineer' employee.txt
2) 在文本最后追加一行
sed '$ a 106,Jack Johnson,Engineer' employee.txt
3) 在文本匹配处增加多行
sed '/Jason/a\
203,Jack Johnson,Engineer\
204,Mark Smith,Sales Engineer'employee.txt
注意:反斜杠“\”续行符的使用
D. 使用i命令插入行
格式:sed '[address] i the-line-to-insert' input-file
用法跟a命令类似,不同的是在匹配地址所有行之前
E. 使用c命令修改行
格式:sed '[address] c the-line-to-insert' input-file
意义不同,用法类似
F. 使用l命令打印隐藏字符
格式:sed –n l input-file
G. 使用=命令打印行号
格式:sed = input-file
打印字符串所在行号
sed ‘/string/ =’ input-file
H. 使用y命令作字符转换
格式: sed ‘y/original-string/replace-string/’ input-file
示例:sed 'y/abc/ABC/' employee.txt
可用于加密字符串
I. 使用q命令终止执行
示例: sed ‘5 q’ input-file 执行完第5行后终止
sed‘/root/ q’ input-file匹配到root行后退出