Linux命令—sed
作用:用于处理文本的流编辑器.
命令格式
sed Options '[Address]Command' InputFile
对输入文件 InputFile 中的每行执行给定的命令 Command.
如果指定了地址 Address,则只对符合条件的文本行执行 Command 命令.
常用选项
-i
: 原地修改,会改变源文件中的内容.-n
: 处理过程中,不要输出正在处理的文本行.-r
: 使用正则表达式扩展.-f File
: 从文件 File 中读取 sed 命令.
n
: 第 n 行.
[ming@localhost test]$ cat data.txt
a
a123
aa456
aaa789
b123
bb456
bbb789[ming@localhost test]$ sed -n '2p' data.txt
a123
p
: 打印行.$
: 最后一行.
[ming@localhost test]$ sed -n '$p' data.txt
bbb789
/regexp/
: 匹配指定正则表达式的行.
[ming@localhost test]$ sed -nr '/a+/p' data.txt
a
a123
aa456
aaa789[ming@localhost test]$ sed -nr '/a{2,}/p' data.txt
aa456
aaa789
n~m
: 从第 n 行开始,每 m 行便执行给定的命令.
[ming@localhost test]$ cat data.txt
a
a123
aa456
aaa789
b123
bb456
bbb789[ming@localhost test]$ sed -n '1~2p' data.txt
a
aa456
b123
bbb789
addr1,addr2
: 从 addr1 开始,到 addr2 结束,包括首尾.
[ming@localhost test]$ sed -n '2,4p' data.txt
a123
aa456
aaa789[ming@localhost test]$ sed -n '/123/,/123/p' data.txt
a123
aa456
aaa789
b123
addr,+n
: 从 addr 开始(包括),直到往后 n 行.
[ming@localhost test]$ sed -n '2,+2p' data.txt
a123
aa456
aaa789[ming@localhost test]$ sed -nr '/a{3}/,+2p' data.txt
aaa789
b123
bb456
1. 替换:
s/regexp/replacement/
替换每行第一处匹配的地方:将 a 替换成 A
[ming@localhost test]$ sed 's/a/A/' data.txt
A
A123
Aa456
Aaa789
b123
bb456
bbb789
替换每行第 2 处匹配的地方:
[ming@localhost test]$ sed 's/a/A/2' data.txt
a
a123
aA456
aAa789
b123
bb456
bbb789
替换每行所有匹配的地方:
g
[ming@localhost test]$ sed 's/a/A/g' data.txt
A
A123
AA456
AAA789
b123
bb456
bbb789
使用正则表达式:
[ming@localhost test]$ sed -r 's/[0-9]+/Number/' data.txt
a
aNumber
aaNumber
aaaNumber
bNumber
bbNumber
bbbNumber
引用匹配的内容:
&
[ming@localhost test]$ sed -r 's/[0-9]+/<&>/' data.txt
a
a<123>
aa<456>
aaa<789>
b<123>
bb<456>
bbb<789>
引用匹配的分组:
\n
[ming@localhost test]$ sed -r 's/a{1,3}([0-9]+)/<\1>/' data.txt
a
<123>
<456>
<789>
b123
bb456
bbb789
\n
: 引用第 n 个分组.2. 删除行:
d
[ming@localhost test]$ sed '/a\+/d' data.txt
b123
bb456
bbb789
3. 插入行:
i\
或 a\
插到指定行之前:
i\
[ming@localhost test]$ sed -r '/a+/i\line1\n\line2' data.txt
line1
line2
a
line1
line2
a123
line1
line2
aa456
line1
line2
aaa789
b123
bb456
bbb789
插到指定行之后:
a\
[ming@localhost test]$ sed -r '/a+/a\line1' data.txt
a
line1
a123
line1
aa456
line1
aaa789
line1
b123
bb456
bbb789
4. 替换行:
c\
[ming@localhost test]$ sed -r '/a+/c\line has a' data.txt
line has a
line has a
line has a
line has a
b123
bb456
bbb789
5. 映射:
y/source/dest/
[ming@localhost test]$ sed 'y/ab/AB/' data.txt
A
A123
AA456
AAA789
B123
BB456
BBB789
【Linux命令—sed】6. 读写文件
将指定的行写入指定的文件:
w File
[ming@localhost test]$ sed -nr '/a+/w a.txt' data.txt
[ming@localhost test]$ cat a.txt
a
a123
aa456
aaa789
读取文件内容,并将其插到指定行之后:
r File
[ming@localhost test]$ cat input.txt
----
[ming@localhost test]$ sed -r '/a+/r input.txt' data.txt
a
----
a123
----
aa456
----
aaa789
----
b123
bb456
bbb789
7. 使用变量
[ming@localhost test]$ rpl="NUMBER"
[ming@localhost test]$ sed -r 's/[0-9]+/'"$rpl"'/' data.txt
a
aNUMBER
aaNUMBER
aaaNUMBER
bNUMBER
bbNUMBER
bbbNUMBER
8. 使用脚本文件
[ming@localhost test]$ cat script.sed
/a+/ {
i\a begin
a\a end
}s/[0-9]+/Number/[ming@localhost test]$ sed -rf script.sed data.txt
a begin
a
a end
a begin
aNumber
a end
a begin
aaNumber
a end
a begin
aaaNumber
a end
bNumber
bbNumber
bbbNumber
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术